forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ipc/tracing: Use typed trace events for IPC message sends
Replaces SyncChannel::Send, RenderProcessHostImpl::Send, and GpuChannelHost::Send trace events with typed trace events. Also adds a utility to convert the IPC class ID to a corresponding protobuf enum. Corresponding proto buffer definitions for these events were added in aosp/1180211. Typed trace events will allow inclusion of the event arguments in slow reports data in the future. The trace format is protocol-buffer based under the hood already (see docs.perfetto.dev for details), this patch adds strong typing for the arguments of the respective events only. TBR: sunnyps@chromium.org Bug: 644264 Change-Id: I91c71230e62161b08faec889bf9eb70639ae0b5e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1950986 Commit-Queue: Eric Seckler <eseckler@chromium.org> Reviewed-by: Alex Moshchuk <alexmos@chromium.org> Reviewed-by: Ken Rockot <rockot@google.com> Cr-Commit-Position: refs/heads/master@{#730120}
- Loading branch information
Showing
7 changed files
with
183 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,129 @@ | ||
// Copyright 2019 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#include "ipc/trace_ipc_message.h" | ||
|
||
#include <stdint.h> | ||
|
||
#include "ipc/ipc_message_macros.h" | ||
#include "ipc/ipc_message_start.h" | ||
#include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_legacy_ipc.pbzero.h" | ||
|
||
namespace IPC { | ||
|
||
using perfetto::protos::pbzero::ChromeLegacyIpc; | ||
|
||
void WriteIpcMessageIdAsProtozero(uint32_t message_id, | ||
ChromeLegacyIpc* legacy_ipc) { | ||
ChromeLegacyIpc::MessageClass message_class = | ||
ChromeLegacyIpc::CLASS_UNSPECIFIED; | ||
switch (IPC_MESSAGE_ID_CLASS(message_id)) { | ||
case AutomationMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_AUTOMATION; | ||
break; | ||
case FrameMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_FRAME; | ||
break; | ||
case PageMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_PAGE; | ||
break; | ||
case ViewMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_VIEW; | ||
break; | ||
case WidgetMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_WIDGET; | ||
break; | ||
case InputMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_INPUT; | ||
break; | ||
case TestMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_TEST; | ||
break; | ||
case WorkerMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_WORKER; | ||
break; | ||
case NaClMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_NACL; | ||
break; | ||
case GpuChannelMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_GPU_CHANNEL; | ||
break; | ||
case MediaMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_MEDIA; | ||
break; | ||
case PpapiMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_PPAPI; | ||
break; | ||
case ChromeMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_CHROME; | ||
break; | ||
case DragMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_DRAG; | ||
break; | ||
case PrintMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_PRINT; | ||
break; | ||
case ExtensionMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_EXTENSION; | ||
break; | ||
case TextInputClientMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_TEXT_INPUT_CLIENT; | ||
break; | ||
case BlinkTestMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_BLINK_TEST; | ||
break; | ||
case AccessibilityMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_ACCESSIBILITY; | ||
break; | ||
case PrerenderMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_PRERENDER; | ||
break; | ||
case ChromotingMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_CHROMOTING; | ||
break; | ||
case AndroidWebViewMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_ANDROID_WEB_VIEW; | ||
break; | ||
case NaClHostMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_NACL_HOST; | ||
break; | ||
case EncryptedMediaMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_ENCRYPTED_MEDIA; | ||
break; | ||
case CastMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_CAST; | ||
break; | ||
case GinJavaBridgeMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_GIN_JAVA_BRIDGE; | ||
break; | ||
case ChromeUtilityPrintingMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_CHROME_UTILITY_PRINTING; | ||
break; | ||
case OzoneGpuMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_OZONE_GPU; | ||
break; | ||
case WebTestMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_WEB_TEST; | ||
break; | ||
case ExtensionsGuestViewMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_EXTENSIONS_GUEST_VIEW; | ||
break; | ||
case GuestViewMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_GUEST_VIEW; | ||
break; | ||
case MediaPlayerDelegateMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_MEDIA_PLAYER_DELEGATE; | ||
break; | ||
case ExtensionWorkerMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_EXTENSION_WORKER; | ||
break; | ||
case UnfreezableFrameMsgStart: | ||
message_class = ChromeLegacyIpc::CLASS_UNFREEZABLE_FRAME; | ||
break; | ||
} | ||
legacy_ipc->set_message_class(message_class); | ||
legacy_ipc->set_message_line(IPC_MESSAGE_ID_LINE(message_id)); | ||
} | ||
|
||
} // namespace IPC |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// Copyright 2019 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#ifndef IPC_TRACE_IPC_MESSAGE_H_ | ||
#define IPC_TRACE_IPC_MESSAGE_H_ | ||
|
||
#include <stdint.h> | ||
|
||
#include "base/component_export.h" | ||
#include "services/tracing/public/cpp/perfetto/macros.h" | ||
#include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_legacy_ipc.pbzero.h" | ||
|
||
// When tracing is enabled, emits a trace event with the given category and | ||
// event name and typed arguments for the message's type (message class and line | ||
// number). | ||
#define TRACE_IPC_MESSAGE_SEND(category, name, msg) \ | ||
TRACE_EVENT(category, name, [msg](perfetto::EventContext ctx) { \ | ||
IPC::WriteIpcMessageIdAsProtozero(msg->type(), \ | ||
ctx.event()->set_chrome_legacy_ipc()); \ | ||
}); | ||
|
||
namespace IPC { | ||
|
||
// Converts |message_id| into its message class and line number parts and writes | ||
// them to the protozero message |ChromeLegacyIpc| for trace events. | ||
void COMPONENT_EXPORT(IPC) | ||
WriteIpcMessageIdAsProtozero(uint32_t message_id, | ||
perfetto::protos::pbzero::ChromeLegacyIpc*); | ||
|
||
} // namespace IPC | ||
|
||
#endif // IPC_TRACE_IPC_MESSAGE_H_ |