| Index: extensions/renderer/extension_frame_helper.cc
|
| diff --git a/extensions/renderer/extension_frame_helper.cc b/extensions/renderer/extension_frame_helper.cc
|
| index f590b01ccc4f54dc172f2b2076863bba01e1fc19..67b4671276cc32c6ca2a3f9a7fc42640e9dac720 100644
|
| --- a/extensions/renderer/extension_frame_helper.cc
|
| +++ b/extensions/renderer/extension_frame_helper.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/metrics/histogram_macros.h"
|
| #include "base/strings/string_util.h"
|
| +#include "base/timer/elapsed_timer.h"
|
| #include "content/public/renderer/render_frame.h"
|
| #include "extensions/common/api/messaging/message.h"
|
| #include "extensions/common/constants.h"
|
| @@ -81,8 +82,27 @@ void RunCallbacksWhileFrameIsValid(
|
| }
|
| }
|
|
|
| +enum class PortType {
|
| + EXTENSION,
|
| + TAB,
|
| + NATIVE_APP,
|
| +};
|
| +
|
| } // namespace
|
|
|
| +struct ExtensionFrameHelper::PendingPortRequest {
|
| + PendingPortRequest(PortType type, const base::Callback<void(int)>& callback)
|
| + : type(type), callback(callback) {}
|
| + ~PendingPortRequest() {}
|
| +
|
| + base::ElapsedTimer timer;
|
| + PortType type;
|
| + base::Callback<void(int)> callback;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(PendingPortRequest);
|
| +};
|
| +
|
| ExtensionFrameHelper::ExtensionFrameHelper(content::RenderFrame* render_frame,
|
| Dispatcher* extension_dispatcher)
|
| : content::RenderFrameObserver(render_frame),
|
| @@ -180,7 +200,8 @@ void ExtensionFrameHelper::RequestPortId(
|
| bool include_tls_channel_id,
|
| const base::Callback<void(int)>& callback) {
|
| int port_request_id = next_port_request_id_++;
|
| - pending_port_requests_[port_request_id] = callback;
|
| + pending_port_requests_[port_request_id] =
|
| + base::MakeUnique<PendingPortRequest>(PortType::EXTENSION, callback);
|
| {
|
| SCOPED_UMA_HISTOGRAM_TIMER(
|
| "Extensions.Messaging.GetPortIdSyncTime.Extension");
|
| @@ -196,7 +217,8 @@ void ExtensionFrameHelper::RequestTabPortId(
|
| const std::string& channel_name,
|
| const base::Callback<void(int)>& callback) {
|
| int port_request_id = next_port_request_id_++;
|
| - pending_port_requests_[port_request_id] = callback;
|
| + pending_port_requests_[port_request_id] =
|
| + base::MakeUnique<PendingPortRequest>(PortType::TAB, callback);
|
| {
|
| SCOPED_UMA_HISTOGRAM_TIMER("Extensions.Messaging.GetPortIdSyncTime.Tab");
|
| render_frame()->Send(new ExtensionHostMsg_OpenChannelToTab(
|
| @@ -209,7 +231,8 @@ void ExtensionFrameHelper::RequestNativeAppPortId(
|
| const std::string& native_app_name,
|
| const base::Callback<void(int)>& callback) {
|
| int port_request_id = next_port_request_id_++;
|
| - pending_port_requests_[port_request_id] = callback;
|
| + pending_port_requests_[port_request_id] =
|
| + base::MakeUnique<PendingPortRequest>(PortType::NATIVE_APP, callback);
|
| {
|
| SCOPED_UMA_HISTOGRAM_TIMER(
|
| "Extensions.Messaging.GetPortIdSyncTime.NativeApp");
|
| @@ -341,7 +364,25 @@ void ExtensionFrameHelper::OnExtensionMessageInvoke(
|
| void ExtensionFrameHelper::OnAssignPortId(int port_id, int request_id) {
|
| auto iter = pending_port_requests_.find(request_id);
|
| DCHECK(iter != pending_port_requests_.end());
|
| - iter->second.Run(port_id);
|
| + PendingPortRequest& request = *iter->second;
|
| + switch (request.type) {
|
| + case PortType::EXTENSION: {
|
| + UMA_HISTOGRAM_TIMES("Extensions.Messaging.GetPortIdAsyncTime.Extension",
|
| + request.timer.Elapsed());
|
| + break;
|
| + }
|
| + case PortType::TAB: {
|
| + UMA_HISTOGRAM_TIMES("Extensions.Messaging.GetPortIdAsyncTime.Tab",
|
| + request.timer.Elapsed());
|
| + break;
|
| + }
|
| + case PortType::NATIVE_APP: {
|
| + UMA_HISTOGRAM_TIMES("Extensions.Messaging.GetPortIdAsyncTime.NativeApp",
|
| + request.timer.Elapsed());
|
| + break;
|
| + }
|
| + }
|
| + request.callback.Run(port_id);
|
| pending_port_requests_.erase(iter);
|
| }
|
|
|
|
|