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

Side by Side Diff: ipc/ipc_message_macros.h

Issue 8480014: Support tracking of IPC messages as tasks in profiler (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/tracked_objects_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Defining IPC Messages 5 // Defining IPC Messages
6 // 6 //
7 // Your IPC messages will be defined by macros inside of an XXX_messages.h 7 // Your IPC messages will be defined by macros inside of an XXX_messages.h
8 // header file. Most of the time, the system can automatically generate all 8 // header file. Most of the time, the system can automatically generate all
9 // of messaging mechanism from these definitions, but sometimes some manual 9 // of messaging mechanism from these definitions, but sometimes some manual
10 // coding is required. In these cases, you will also have an XXX_messages.cc 10 // coding is required. In these cases, you will also have an XXX_messages.cc
11 // implemation file as well. 11 // implemation file as well.
12 // 12 //
13 // The senders of your messages will include your XXX_messages.h file to 13 // The senders of your messages will include your XXX_messages.h file to
14 // get the full set of definitions they need to send your messages. 14 // get the full set of definitions they need to send your messages.
15 // 15 //
16 // Each XXX_messages.h file must be registered with the IPC system. This 16 // Each XXX_messages.h file must be registered with the IPC system. This
17 // requires adding two things: 17 // requires adding two things:
18 // - An XXXMsgStart value to the IPCMessageStart enum in ipc_message_utils.h 18 // - An XXXMsgStart value to the IPCMessageStart enum in ipc_message_utils.h
19 // - An inclusion of XXX_messages.h file in a message generator .h file 19 // - An inclusion of XXX_messages.h file in a message generator .h file
20 // 20 //
21 // The XXXMsgStart value is an enumeration that ensures uniqueness for 21 // The XXXMsgStart value is an enumeration that ensures uniqueness for
22 // each different message file. Later, you will use this inside your 22 // each different message file. Later, you will use this inside your
23 // XXX_messages.h file before invoking message declatation macros: 23 // XXX_messages.h file before invoking message declaration macros:
24 // #define IPC_MESSAGE_START XXXMsgStart 24 // #define IPC_MESSAGE_START XXXMsgStart
25 // ( ... your macro invocations go here ... ) 25 // ( ... your macro invocations go here ... )
26 // 26 //
27 // Message Generator Files 27 // Message Generator Files
28 // 28 //
29 // A message generator .h header file pulls in all other message-declaring 29 // A message generator .h header file pulls in all other message-declaring
30 // headers for a given component. It is included by a message generator 30 // headers for a given component. It is included by a message generator
31 // .cc file, which is where all the generated code will wind up. Typically, 31 // .cc file, which is where all the generated code will wind up. Typically,
32 // you will use an existing generator (e.g. common_message_generator.cc 32 // you will use an existing generator (e.g. common_message_generator.cc
33 // in /chrome/common), but there are circumstances where you may add a 33 // in /chrome/common), but there are circumstances where you may add a
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 // The handler function will look like: 169 // The handler function will look like:
170 // void OnSyncMessageName(const type1& in1, IPC::Message* reply_msg); 170 // void OnSyncMessageName(const type1& in1, IPC::Message* reply_msg);
171 // 171 //
172 // Receiver stashes the IPC::Message* pointer, and when it's ready, it does: 172 // Receiver stashes the IPC::Message* pointer, and when it's ready, it does:
173 // ViewHostMsg_SyncMessageName::WriteReplyParams(reply_msg, out1, out2); 173 // ViewHostMsg_SyncMessageName::WriteReplyParams(reply_msg, out1, out2);
174 // Send(reply_msg); 174 // Send(reply_msg);
175 175
176 #ifndef IPC_IPC_MESSAGE_MACROS_H_ 176 #ifndef IPC_IPC_MESSAGE_MACROS_H_
177 #define IPC_IPC_MESSAGE_MACROS_H_ 177 #define IPC_IPC_MESSAGE_MACROS_H_
178 178
179 #include "base/profiler/scoped_profile.h"
179 #include "ipc/ipc_message_utils.h" 180 #include "ipc/ipc_message_utils.h"
180 #include "ipc/param_traits_macros.h" 181 #include "ipc/param_traits_macros.h"
181 182
182 #if defined(IPC_MESSAGE_IMPL) 183 #if defined(IPC_MESSAGE_IMPL)
183 #include "ipc/ipc_message_utils_impl.h" 184 #include "ipc/ipc_message_utils_impl.h"
184 #endif 185 #endif
185 186
186 // Override this to force message classes to be exported. 187 // Override this to force message classes to be exported.
187 #ifndef IPC_MESSAGE_EXPORT 188 #ifndef IPC_MESSAGE_EXPORT
188 #define IPC_MESSAGE_EXPORT 189 #define IPC_MESSAGE_EXPORT
(...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 bool& msg_is_ok__ = msg_is_ok; \ 934 bool& msg_is_ok__ = msg_is_ok; \
934 switch (ipc_message__.type()) { \ 935 switch (ipc_message__.type()) { \
935 936
936 #define IPC_BEGIN_MESSAGE_MAP(class_name, msg) \ 937 #define IPC_BEGIN_MESSAGE_MAP(class_name, msg) \
937 { \ 938 { \
938 typedef class_name _IpcMessageHandlerClass; \ 939 typedef class_name _IpcMessageHandlerClass; \
939 const IPC::Message& ipc_message__ = msg; \ 940 const IPC::Message& ipc_message__ = msg; \
940 bool msg_is_ok__ = true; \ 941 bool msg_is_ok__ = true; \
941 switch (ipc_message__.type()) { \ 942 switch (ipc_message__.type()) { \
942 943
943 #define IPC_MESSAGE_FORWARD(msg_class, obj, member_func) \ 944 #define IPC_MESSAGE_FORWARD(msg_class, obj, member_func) \
944 case msg_class::ID: \ 945 case msg_class::ID: { \
945 msg_is_ok__ = msg_class::Dispatch(&ipc_message__, obj, this, \ 946 TRACK_RUN_IN_IPC_HANDLER(member_func); \
946 &member_func); \ 947 msg_is_ok__ = msg_class::Dispatch(&ipc_message__, obj, this, \
947 break; 948 &member_func); \
949 } \
950 break;
948 951
949 #define IPC_MESSAGE_HANDLER(msg_class, member_func) \ 952 #define IPC_MESSAGE_HANDLER(msg_class, member_func) \
950 IPC_MESSAGE_FORWARD(msg_class, this, _IpcMessageHandlerClass::member_func) 953 IPC_MESSAGE_FORWARD(msg_class, this, _IpcMessageHandlerClass::member_func)
951 954
952 #define IPC_MESSAGE_FORWARD_DELAY_REPLY(msg_class, obj, member_func) \ 955 #define IPC_MESSAGE_FORWARD_DELAY_REPLY(msg_class, obj, member_func) \
953 case msg_class::ID: \ 956 case msg_class::ID: { \
954 msg_is_ok__ = msg_class::DispatchDelayReply(&ipc_message__, obj, \ 957 TRACK_RUN_IN_IPC_HANDLER(member_func); \
955 &member_func); \ 958 msg_is_ok__ = msg_class::DispatchDelayReply(&ipc_message__, obj, \
956 break; 959 &member_func); \
960 } \
961 break;
957 962
958 #define IPC_MESSAGE_HANDLER_DELAY_REPLY(msg_class, member_func) \ 963 #define IPC_MESSAGE_HANDLER_DELAY_REPLY(msg_class, member_func) \
959 IPC_MESSAGE_FORWARD_DELAY_REPLY(msg_class, this, \ 964 IPC_MESSAGE_FORWARD_DELAY_REPLY(msg_class, this, \
960 _IpcMessageHandlerClass::member_func) 965 _IpcMessageHandlerClass::member_func)
961 966
962 #define IPC_MESSAGE_HANDLER_GENERIC(msg_class, code) \ 967 #define IPC_MESSAGE_HANDLER_GENERIC(msg_class, code) \
963 case msg_class::ID: \ 968 case msg_class::ID: \
964 code; \ 969 code; \
965 break; 970 break;
966 971
967 #define IPC_REPLY_HANDLER(func) \ 972 #define IPC_REPLY_HANDLER(func) \
968 case IPC_REPLY_ID: \ 973 case IPC_REPLY_ID: { \
969 func(ipc_message__); \ 974 TRACK_RUN_IN_IPC_HANDLER(func); \
975 func(ipc_message__); \
976 } \
970 break; 977 break;
971 978
972 979
973 #define IPC_MESSAGE_UNHANDLED(code) \ 980 #define IPC_MESSAGE_UNHANDLED(code) \
974 default: \ 981 default: \
975 code; \ 982 code; \
976 break; 983 break;
977 984
978 #define IPC_MESSAGE_UNHANDLED_ERROR() \ 985 #define IPC_MESSAGE_UNHANDLED_ERROR() \
979 IPC_MESSAGE_UNHANDLED(NOTREACHED() << \ 986 IPC_MESSAGE_UNHANDLED(NOTREACHED() << \
(...skipping 12 matching lines...) Expand all
992 // This corresponds to an enum value from IPCMessageStart. 999 // This corresponds to an enum value from IPCMessageStart.
993 #define IPC_MESSAGE_CLASS(message) \ 1000 #define IPC_MESSAGE_CLASS(message) \
994 IPC_MESSAGE_ID_CLASS(message.type()) 1001 IPC_MESSAGE_ID_CLASS(message.type())
995 1002
996 #endif // IPC_IPC_MESSAGE_MACROS_H_ 1003 #endif // IPC_IPC_MESSAGE_MACROS_H_
997 1004
998 // Clean up IPC_MESSAGE_START in this unguarded section so that the 1005 // Clean up IPC_MESSAGE_START in this unguarded section so that the
999 // XXX_messages.h files need not do so themselves. This makes the 1006 // XXX_messages.h files need not do so themselves. This makes the
1000 // XXX_messages.h files easier to write. 1007 // XXX_messages.h files easier to write.
1001 #undef IPC_MESSAGE_START 1008 #undef IPC_MESSAGE_START
OLDNEW
« no previous file with comments | « base/tracked_objects_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698