Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/trace/indexer/BTreeNodeCache.java')
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/trace/indexer/BTreeNodeCache.java146
1 files changed, 0 insertions, 146 deletions
diff --git a/lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/trace/indexer/BTreeNodeCache.java b/lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/trace/indexer/BTreeNodeCache.java
deleted file mode 100644
index a0b8488564..0000000000
--- a/lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/trace/indexer/BTreeNodeCache.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 Ericsson
- *
- * All rights reserved. This program and the accompanying materials are
- * made available under the terms of the Eclipse Public License v1.0 which
- * accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Marc-Andre Laperle - Initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.linuxtools.internal.tmf.core.trace.indexer;
-
-import java.util.ArrayDeque;
-import java.util.Deque;
-
-/**
- * A simple LRU node cache. The BTree request a node from the cache and the
- * cache load it from disk if it's not already in memory.
- *
- * This cache could be improved considerably by allowing bigger caches.
- *
- * @author Marc-Andre Laperle
- */
-public class BTreeNodeCache {
-
- /**
- * Cache size obtained by experimentation. An improved cache could set this
- * dynamically or using a user preference.
- */
- private static final int CACHE_SIZE = 15;
-
- private final BTree fTree;
- /**
- * The root node is always kept in memory when {@link
- * BTree#ALWAYS_CACHE_ROOT} is set to true
- */
- private BTreeNode fRootNode = null;
- /**
- * The collection keeping the nodes in memory. The most recently used is
- * kept at the front of the double-ended queue and the least recently used
- * node is kept at the back.
- */
- private final Deque<BTreeNode> fCachedNodes = new ArrayDeque<>(CACHE_SIZE);
-
- private int fCcheMisses = 0;
-
- /**
- * Construct a new node cache for the given BTree
- *
- * @param tree
- * the BTree that will use the cache
- */
- BTreeNodeCache(BTree tree) {
- fTree = tree;
- }
-
- /**
- * Get the node at the offset from the cache. If the node is not found in
- * memory, it is loaded from disk.
- *
- * @param offset
- * @return
- */
- BTreeNode getNode(long offset) {
- if (fRootNode != null && fRootNode.getOffset() == offset) {
- return fRootNode;
- }
-
- for (BTreeNode nodeSearch : fCachedNodes) {
- if (nodeSearch.getOffset() == offset) {
- // This node is now the most recently used
- fCachedNodes.remove(nodeSearch);
- fCachedNodes.push(nodeSearch);
-
- return nodeSearch;
- }
- }
-
- ++fCcheMisses;
-
- BTreeNode node = new BTreeNode(fTree, offset);
- node.serializeIn();
- addNode(node);
-
- return node;
- }
-
- /**
- * Write all in-memory nodes to disk if they are dirty
- */
- void serialize() {
- if (fRootNode != null && fRootNode.isDirty()) {
- fRootNode.serializeOut();
- }
- for (BTreeNode nodeSearch : fCachedNodes) {
- if (nodeSearch.isDirty()) {
- nodeSearch.serializeOut();
- }
- }
- }
-
- /**
- * Add a node to the cache. If the cache has reached the size specified with
- * {@link #CACHE_SIZE}, the least recently used node is removed from memory.
- *
- * @param node
- * the node to add to the cache
- */
- void addNode(BTreeNode node) {
- if (fCachedNodes.size() >= CACHE_SIZE) {
- BTreeNode removed = fCachedNodes.removeLast();
- if (removed.isDirty()) {
- removed.serializeOut();
- }
- }
- fCachedNodes.push(node);
- }
-
- /**
- * Set the root node. See {@link #fRootNode}
- *
- * @param newRootNode
- * the new root node
- */
- void setRootNode(BTreeNode newRootNode) {
- BTreeNode oldRootNode = fRootNode;
- fRootNode = newRootNode;
- if (oldRootNode != null) {
- addNode(oldRootNode);
- }
- return;
- }
-
- /**
- * Useful for benchmarks. Get the number of cache misses for the whole BTree
- * instance lifetime. Cache misses occur when a node is requested and it's
- * not in memory therefore it has to be read from disk.
- *
- * @return the number of cache misses.
- */
- int getCacheMisses() {
- return fCcheMisses;
- }
-}

Back to the top