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

Unified Diff: chrome/browser/sync/engine/syncapi.cc

Issue 7049028: [Sync] Speed up Javascript node operations (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 7 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
« no previous file with comments | « chrome/browser/sync/engine/syncapi.h ('k') | chrome/browser/sync/engine/syncapi_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/engine/syncapi.cc
diff --git a/chrome/browser/sync/engine/syncapi.cc b/chrome/browser/sync/engine/syncapi.cc
index 72491200a05f16da6c28f2d5001f67bc24d34604..5261732a6faa13dfb7cb7d3ac74a19d4cbe9eed7 100644
--- a/chrome/browser/sync/engine/syncapi.cc
+++ b/chrome/browser/sync/engine/syncapi.cc
@@ -1548,7 +1548,10 @@ class SyncManager::SyncInternal
void OnIPAddressChangedImpl();
// Functions called by ProcessMessage().
- browser_sync::JsArgList ProcessGetNodeByIdMessage(
+ browser_sync::JsArgList ProcessGetNodesByIdMessage(
+ const browser_sync::JsArgList& args);
+
+ browser_sync::JsArgList ProcessGetChildNodeIdsMessage(
const browser_sync::JsArgList& args);
browser_sync::JsArgList ProcessFindNodesContainingString(
@@ -2712,13 +2715,20 @@ void SyncManager::SyncInternal::ProcessMessage(
return_args.Append(root.ToValue());
parent_router_->RouteJsMessageReply(
name, browser_sync::JsArgList(&return_args), sender);
- } else if (name == "getNodeById") {
+ } else if (name == "getNodesById") {
+ if (!parent_router_) {
+ LogNoRouter(name, args);
+ return;
+ }
+ parent_router_->RouteJsMessageReply(
+ name, ProcessGetNodesByIdMessage(args), sender);
+ } else if (name == "getChildNodeIds") {
if (!parent_router_) {
LogNoRouter(name, args);
return;
}
parent_router_->RouteJsMessageReply(
- name, ProcessGetNodeByIdMessage(args), sender);
+ name, ProcessGetChildNodeIdsMessage(args), sender);
} else if (name == "findNodesContainingString") {
if (!parent_router_) {
LogNoRouter(name, args);
@@ -2751,29 +2761,70 @@ void SyncManager::SyncInternal::RouteJsMessageReply(
parent_router_->RouteJsMessageReply(name, args, target);
}
-browser_sync::JsArgList SyncManager::SyncInternal::ProcessGetNodeByIdMessage(
- const browser_sync::JsArgList& args) {
- ListValue null_return_args_list;
- null_return_args_list.Append(Value::CreateNullValue());
- browser_sync::JsArgList null_return_args(&null_return_args_list);
+namespace {
+
+bool GetId(const ListValue& ids, int i, int64* id) {
std::string id_str;
- if (!args.Get().GetString(0, &id_str)) {
- return null_return_args;
+ if (!ids.GetString(i, &id_str)) {
+ return false;
}
- int64 id;
- if (!base::StringToInt64(id_str, &id)) {
- return null_return_args;
+ if (!base::StringToInt64(id_str, id)) {
+ return false;
}
- if (id == kInvalidId) {
- return null_return_args;
+ if (*id == kInvalidId) {
+ return false;
}
+ return true;
+}
+
+} // namespace
+
+browser_sync::JsArgList SyncManager::SyncInternal::ProcessGetNodesByIdMessage(
+ const browser_sync::JsArgList& args) {
+ ListValue return_args;
+ ListValue* nodes = new ListValue();
+ return_args.Append(nodes);
+ ListValue* id_list = NULL;
ReadTransaction trans(GetUserShare());
- ReadNode node(&trans);
- if (!node.InitByIdLookup(id)) {
- return null_return_args;
+ if (args.Get().GetList(0, &id_list)) {
+ for (size_t i = 0; i < id_list->GetSize(); ++i) {
+ int64 id = kInvalidId;
+ if (!GetId(*id_list, i, &id)) {
+ continue;
+ }
+ ReadNode node(&trans);
+ if (!node.InitByIdLookup(id)) {
+ continue;
+ }
+ nodes->Append(node.ToValue());
+ }
}
+ return browser_sync::JsArgList(&return_args);
+}
+
+browser_sync::JsArgList SyncManager::SyncInternal::
+ ProcessGetChildNodeIdsMessage(
+ const browser_sync::JsArgList& args) {
ListValue return_args;
- return_args.Append(node.ToValue());
+ ListValue* child_ids = new ListValue();
+ return_args.Append(child_ids);
+ int64 id = kInvalidId;
+ if (GetId(args.Get(), 0, &id)) {
+ ReadTransaction trans(GetUserShare());
+ ReadNode node(&trans);
+ if (node.InitByIdLookup(id)) {
+ int64 child_id = node.GetFirstChildId();
+ while (child_id != kInvalidId) {
+ ReadNode child_node(&trans);
+ if (!child_node.InitByIdLookup(child_id)) {
+ break;
+ }
+ child_ids->Append(Value::CreateStringValue(
+ base::Int64ToString(child_id)));
+ child_id = child_node.GetSuccessorId();
+ }
+ }
+ }
return browser_sync::JsArgList(&return_args);
}
« no previous file with comments | « chrome/browser/sync/engine/syncapi.h ('k') | chrome/browser/sync/engine/syncapi_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698