Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5509)

Unified Diff: chrome/browser/sync/syncable/syncable.h

Issue 6588119: First-time sync: asymptotic running time improvement (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome/Release
Patch Set: Fix unit_tests Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/syncable/syncable.h
diff --git a/chrome/browser/sync/syncable/syncable.h b/chrome/browser/sync/syncable/syncable.h
index af0977999bb0116e335a679807407c86c8a8cd7f..3a3c5975f13d5aabd097cc8cc8863399a78ffe06 100644
--- a/chrome/browser/sync/syncable/syncable.h
+++ b/chrome/browser/sync/syncable/syncable.h
@@ -416,6 +416,12 @@ class Entry {
return *kernel_;
}
+ // Compute a local predecessor position for |update_item|, based on its
+ // absolute server position. The returned ID will be a valid predecessor
+ // under SERVER_PARENT_ID that is consistent with the
+ // SERVER_POSITION_IN_PARENT ordering.
+ Id ComputePrevIdFromServerPosition(const Id& parent_id) const;
+
protected: // Don't allow creation on heap, except by sync API wrappers.
friend class sync_api::ReadNode;
void* operator new(size_t size) { return (::operator new)(size); }
@@ -602,7 +608,11 @@ struct ClientTagIndexer {
struct ParentIdAndHandleIndexer {
// This index is of the parent ID and metahandle. We use a custom
// comparator.
- class Comparator;
+ class Comparator {
+ public:
+ bool operator() (const syncable::EntryKernel* a,
+ const syncable::EntryKernel* b) const;
+ };
// This index does not include deleted items.
static bool ShouldInclude(const EntryKernel* a);
@@ -683,7 +693,6 @@ struct DirectoryChangeEvent {
class ScopedKernelLock;
class IdFilter;
class DirectoryManager;
-struct PathMatcher;
class Directory {
friend class BaseTransaction;
@@ -865,17 +874,21 @@ class Directory {
// Returns the child meta handles for given parent id.
void GetChildHandles(BaseTransaction*, const Id& parent_id,
- const std::string& path_spec, ChildHandles* result);
- void GetChildHandles(BaseTransaction*, const Id& parent_id,
ChildHandles* result);
- void GetChildHandlesImpl(BaseTransaction* trans, const Id& parent_id,
- PathMatcher* matcher, ChildHandles* result);
// Find the first or last child in the positional ordering under a parent,
// and return its id. Returns a root Id if parent has no children.
virtual Id GetFirstChildId(BaseTransaction* trans, const Id& parent_id);
Id GetLastChildId(BaseTransaction* trans, const Id& parent_id);
+ // Compute a local predecessor position for |update_item|. The position
+ // is determined by the SERVER_POSITION_IN_PARENT value of |update_item|,
+ // as well as the SERVER_POSITION_IN_PARENT values of any up-to-date
+ // children of |parent_id|.
+ Id ComputePrevIdFromServerPosition(
+ const EntryKernel* update_item,
+ const syncable::Id& parent_id);
+
// SaveChanges works by taking a consistent snapshot of the current Directory
// state and indices (by deep copy) under a ReadTransaction, passing this
// snapshot to the backing store under no transaction, and finally cleaning
@@ -958,11 +971,6 @@ class Directory {
void GetAllMetaHandles(BaseTransaction* trans, MetahandleSet* result);
bool SafeToPurgeFromMemory(const EntryKernel* const entry) const;
- // Helper method used to implement GetFirstChildId/GetLastChildId.
- Id GetChildWithNullIdField(IdField field,
- BaseTransaction* trans,
- const Id& parent_id);
-
// Internal setters that do not acquire a lock internally. These are unsafe
// on their own; caller must guarantee exclusive access manually by holding
// a ScopedKernelLock.
@@ -1073,6 +1081,25 @@ class Directory {
DebugQueue<int64, 1000> flushed_metahandles;
};
+ // Helper method used to do searches on |parent_id_child_index|.
+ ParentIdChildIndex::iterator LocateInParentChildIndex(
+ const ScopedKernelLock& lock,
+ const Id& parent_id,
+ int64 position_in_parent,
+ const Id& item_id_for_tiebreaking);
+
+ // Return an iterator to the beginning of the range of the children of
+ // |parent_id| in the kernel's parent_id_child_index.
+ ParentIdChildIndex::iterator GetParentChildIndexLowerBound(
+ const ScopedKernelLock& lock,
+ const Id& parent_id);
+
+ // Return an iterator to just past the end of the range of the
+ // children of |parent_id| in the kernel's parent_id_child_index.
+ ParentIdChildIndex::iterator GetParentChildIndexUpperBound(
+ const ScopedKernelLock& lock,
+ const Id& parent_id);
+
Kernel* kernel_;
DirectoryBackingStore* store_;

Powered by Google App Engine
This is Rietveld 408576698