Commit 8ff7a295 authored by estade@chromium.org's avatar estade@chromium.org

Remove some unnecessary heap allocations and copies.

- Remove some calls to base::CreateStringValue
- pass some things by const ref instead of copying or scoped_ptr

BUG=160586

Review URL: https://codereview.chromium.org/377723003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@281873 0039d316-1c4b-4281-b951-d872f2087c98
parent edb3dd8f
......@@ -86,8 +86,9 @@ class RenderViewHostTargetsUIHandler
: public DevToolsTargetsUIHandler,
public content::NotificationObserver {
public:
explicit RenderViewHostTargetsUIHandler(Callback callback);
explicit RenderViewHostTargetsUIHandler(const Callback& callback);
virtual ~RenderViewHostTargetsUIHandler();
private:
// content::NotificationObserver overrides.
virtual void Observe(int type,
......@@ -101,7 +102,7 @@ class RenderViewHostTargetsUIHandler
};
RenderViewHostTargetsUIHandler::RenderViewHostTargetsUIHandler(
Callback callback)
const Callback& callback)
: DevToolsTargetsUIHandler(kTargetSourceRenderer, callback) {
notification_registrar_.Add(this,
content::NOTIFICATION_WEB_CONTENTS_CONNECTED,
......@@ -132,7 +133,7 @@ void RenderViewHostTargetsUIHandler::Observe(
}
void RenderViewHostTargetsUIHandler::UpdateTargets() {
scoped_ptr<base::ListValue> list_value(new base::ListValue());
base::ListValue list_value;
std::map<std::string, base::DictionaryValue*> id_to_descriptor;
......@@ -153,7 +154,7 @@ void RenderViewHostTargetsUIHandler::UpdateTargets() {
std::string parent_id = target->GetParentId();
if (parent_id.empty() || id_to_descriptor.count(parent_id) == 0) {
list_value->Append(descriptor);
list_value.Append(descriptor);
} else {
base::DictionaryValue* parent = id_to_descriptor[parent_id];
base::ListValue* guests = NULL;
......@@ -165,7 +166,7 @@ void RenderViewHostTargetsUIHandler::UpdateTargets() {
}
}
SendSerializedTargets(list_value.Pass());
SendSerializedTargets(list_value);
}
// WorkerObserver -------------------------------------------------------------
......@@ -248,7 +249,7 @@ class WorkerTargetsUIHandler
: public DevToolsTargetsUIHandler,
public content::BrowserChildProcessObserver {
public:
explicit WorkerTargetsUIHandler(Callback callback);
explicit WorkerTargetsUIHandler(const Callback& callback);
virtual ~WorkerTargetsUIHandler();
private:
......@@ -263,7 +264,7 @@ class WorkerTargetsUIHandler
scoped_refptr<WorkerObserver> observer_;
};
WorkerTargetsUIHandler::WorkerTargetsUIHandler(Callback callback)
WorkerTargetsUIHandler::WorkerTargetsUIHandler(const Callback& callback)
: DevToolsTargetsUIHandler(kTargetSourceWorker, callback),
observer_(new WorkerObserver()) {
observer_->Start(base::Bind(&WorkerTargetsUIHandler::UpdateTargets,
......@@ -291,15 +292,15 @@ void WorkerTargetsUIHandler::BrowserChildProcessHostDisconnected(
void WorkerTargetsUIHandler::UpdateTargets(
const DevToolsTargetImpl::List& targets) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
scoped_ptr<base::ListValue> list_value(new base::ListValue());
base::ListValue list_value;
STLDeleteValues(&targets_);
for (DevToolsTargetImpl::List::const_iterator it = targets.begin();
it != targets.end(); ++it) {
DevToolsTargetImpl* target = *it;
list_value->Append(Serialize(*target));
list_value.Append(Serialize(*target));
targets_[target->GetId()] = target;
}
SendSerializedTargets(list_value.Pass());
SendSerializedTargets(list_value);
}
// AdbTargetsUIHandler --------------------------------------------------------
......@@ -308,7 +309,7 @@ class AdbTargetsUIHandler
: public DevToolsTargetsUIHandler,
public DevToolsAndroidBridge::DeviceListListener {
public:
AdbTargetsUIHandler(Callback callback, Profile* profile);
AdbTargetsUIHandler(const Callback& callback, Profile* profile);
virtual ~AdbTargetsUIHandler();
virtual void Open(const std::string& browser_id,
......@@ -330,7 +331,8 @@ class AdbTargetsUIHandler
RemoteBrowsers remote_browsers_;
};
AdbTargetsUIHandler::AdbTargetsUIHandler(Callback callback, Profile* profile)
AdbTargetsUIHandler::AdbTargetsUIHandler(const Callback& callback,
Profile* profile)
: DevToolsTargetsUIHandler(kTargetSourceAdb, callback),
profile_(profile) {
DevToolsAndroidBridge* android_bridge =
......@@ -374,7 +376,7 @@ void AdbTargetsUIHandler::DeviceListChanged(
remote_browsers_.clear();
STLDeleteValues(&targets_);
scoped_ptr<base::ListValue> device_list(new base::ListValue());
base::ListValue device_list;
for (DevToolsAndroidBridge::RemoteDevices::const_iterator dit =
devices.begin(); dit != devices.end(); ++dit) {
DevToolsAndroidBridge::RemoteDevice* device = dit->get();
......@@ -446,9 +448,9 @@ void AdbTargetsUIHandler::DeviceListChanged(
browser_list->Append(browser_data);
}
device_list->Append(device_data);
device_list.Append(device_data);
}
SendSerializedTargets(device_list.Pass());
SendSerializedTargets(device_list);
}
} // namespace
......@@ -457,7 +459,7 @@ void AdbTargetsUIHandler::DeviceListChanged(
DevToolsTargetsUIHandler::DevToolsTargetsUIHandler(
const std::string& source_id,
Callback callback)
const Callback& callback)
: source_id_(source_id),
callback_(callback) {
}
......@@ -469,7 +471,7 @@ DevToolsTargetsUIHandler::~DevToolsTargetsUIHandler() {
// static
scoped_ptr<DevToolsTargetsUIHandler>
DevToolsTargetsUIHandler::CreateForRenderers(
DevToolsTargetsUIHandler::Callback callback) {
const DevToolsTargetsUIHandler::Callback& callback) {
return scoped_ptr<DevToolsTargetsUIHandler>(
new RenderViewHostTargetsUIHandler(callback));
}
......@@ -477,7 +479,7 @@ DevToolsTargetsUIHandler::CreateForRenderers(
// static
scoped_ptr<DevToolsTargetsUIHandler>
DevToolsTargetsUIHandler::CreateForWorkers(
DevToolsTargetsUIHandler::Callback callback) {
const DevToolsTargetsUIHandler::Callback& callback) {
return scoped_ptr<DevToolsTargetsUIHandler>(
new WorkerTargetsUIHandler(callback));
}
......@@ -485,7 +487,7 @@ DevToolsTargetsUIHandler::CreateForWorkers(
// static
scoped_ptr<DevToolsTargetsUIHandler>
DevToolsTargetsUIHandler::CreateForAdb(
DevToolsTargetsUIHandler::Callback callback, Profile* profile) {
const DevToolsTargetsUIHandler::Callback& callback, Profile* profile) {
return scoped_ptr<DevToolsTargetsUIHandler>(
new AdbTargetsUIHandler(callback, profile));
}
......@@ -524,8 +526,8 @@ base::DictionaryValue* DevToolsTargetsUIHandler::Serialize(
}
void DevToolsTargetsUIHandler::SendSerializedTargets(
scoped_ptr<base::ListValue> list) {
callback_.Run(source_id_, list.Pass());
const base::ListValue& list) {
callback_.Run(source_id_, list);
}
// PortForwardingStatusSerializer ---------------------------------------------
......
......@@ -23,22 +23,23 @@ class Profile;
class DevToolsTargetsUIHandler {
public:
typedef base::Callback<void(const std::string&,
scoped_ptr<base::ListValue>)> Callback;
const base::ListValue&)> Callback;
typedef base::Callback<void(DevToolsTargetImpl*)> TargetCallback;
DevToolsTargetsUIHandler(const std::string& source_id, Callback callback);
DevToolsTargetsUIHandler(const std::string& source_id,
const Callback& callback);
virtual ~DevToolsTargetsUIHandler();
std::string source_id() const { return source_id_; }
static scoped_ptr<DevToolsTargetsUIHandler> CreateForRenderers(
Callback callback);
const Callback& callback);
static scoped_ptr<DevToolsTargetsUIHandler> CreateForWorkers(
Callback callback);
const Callback& callback);
static scoped_ptr<DevToolsTargetsUIHandler> CreateForAdb(
Callback callback, Profile* profile);
const Callback& callback, Profile* profile);
DevToolsTargetImpl* GetTarget(const std::string& target_id);
......@@ -50,7 +51,7 @@ class DevToolsTargetsUIHandler {
protected:
base::DictionaryValue* Serialize(const DevToolsTargetImpl& target);
void SendSerializedTargets(scoped_ptr<base::ListValue> list);
void SendSerializedTargets(const base::ListValue& list);
typedef std::map<std::string, DevToolsTargetImpl*> TargetMap;
TargetMap targets_;
......
......@@ -387,10 +387,10 @@ void DevToolsUIBindings::DispatchOnEmbedder(const std::string& message) {
std::string error;
embedder_message_dispatcher_->Dispatch(method, params, &error);
if (id) {
scoped_ptr<base::Value> id_value(base::Value::CreateIntegerValue(id));
scoped_ptr<base::Value> error_value(base::Value::CreateStringValue(error));
base::FundamentalValue id_value(id);
base::StringValue error_value(error);
CallClientFunction("InspectorFrontendAPI.embedderMessageAck",
id_value.get(), error_value.get(), NULL);
&id_value, &error_value, NULL);
}
}
......@@ -623,14 +623,13 @@ void DevToolsUIBindings::EnableRemoteDeviceCounter(bool enable) {
}
void DevToolsUIBindings::DeviceCountChanged(int count) {
base::FundamentalValue value(count);
DispatchEventOnFrontend(kDeviceCountChanged, &value);
DispatchEventOnFrontend(kDeviceCountChanged, base::FundamentalValue(count));
}
void DevToolsUIBindings::PopulateRemoteDevices(
const std::string& source,
scoped_ptr<base::ListValue> targets) {
DispatchEventOnFrontend(kDevicesChanged, targets.get());
const base::ListValue& targets) {
DispatchEventOnFrontend(kDevicesChanged, targets);
}
void DevToolsUIBindings::FileSavedAs(const std::string& url) {
......@@ -796,13 +795,13 @@ void DevToolsUIBindings::CallClientFunction(const std::string& function_name,
void DevToolsUIBindings::DispatchEventOnFrontend(
const std::string& event_type,
const base::Value* event_data) {
const base::Value& event_data) {
if (subscribers_.find(event_type) == subscribers_.end())
return;
base::StringValue event_type_value = base::StringValue(event_type);
base::StringValue event_type_value(event_type);
CallClientFunction("InspectorFrontendAPI.dispatchEventToListeners",
&event_type_value,
event_data,
&event_data,
NULL);
}
......
......@@ -73,8 +73,6 @@ class DevToolsUIBindings : public content::NotificationObserver,
const base::Value* arg1,
const base::Value* arg2,
const base::Value* arg3);
void DispatchEventOnFrontend(const std::string& event_type,
const base::Value* event_data);
private:
// content::NotificationObserver:
virtual void Observe(int type,
......@@ -128,7 +126,7 @@ class DevToolsUIBindings : public content::NotificationObserver,
// Forwards discovered devices to frontend.
virtual void PopulateRemoteDevices(const std::string& source,
scoped_ptr<base::ListValue> targets);
const base::ListValue& targets);
void DocumentOnLoadCompletedInMainFrame();
......@@ -157,6 +155,9 @@ class DevToolsUIBindings : public content::NotificationObserver,
void UpdateTheme();
void AddDevToolsExtensionsToClient();
void DispatchEventOnFrontend(const std::string& event_type,
const base::Value& event_data);
class FrontendWebContentsObserver;
friend class FrontendWebContentsObserver;
scoped_ptr<FrontendWebContentsObserver> frontend_contents_observer_;
......
......@@ -476,12 +476,10 @@ DevToolsTargetImpl* InspectUI::FindTarget(
}
void InspectUI::PopulateTargets(const std::string& source,
scoped_ptr<base::ListValue> targets) {
scoped_ptr<base::Value> source_value(base::Value::CreateStringValue(source));
web_ui()->CallJavascriptFunction(
"populateTargets",
*source_value.get(),
*targets.get());
const base::ListValue& targets) {
web_ui()->CallJavascriptFunction("populateTargets",
base::StringValue(source),
targets);
}
void InspectUI::PopulatePortStatus(const base::Value& status) {
......
......@@ -85,7 +85,7 @@ class InspectUI : public content::WebUIController,
const std::string& target_id);
void PopulateTargets(const std::string& source_id,
scoped_ptr<base::ListValue> targets);
const base::ListValue& targets);
void PopulatePortStatus(const base::Value& status);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment