| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef CONTENT_PUBLIC_BROWSER_CONTENT_DEBUG_LOGGING_H_ |
| 6 #define CONTENT_PUBLIC_BROWSER_CONTENT_DEBUG_LOGGING_H_ |
| 7 |
| 8 #include "content/common/content_export.h" |
| 9 |
| 10 #include <string> |
| 11 #include <vector> |
| 12 |
| 13 // When debugging single processes, a common technique is to store |
| 14 // breakpad keys which can be analyzed from crashes. That technique |
| 15 // does not work well for multi-process bugs. This code can |
| 16 // be used to implement a ring buffer in the browser which stores the |
| 17 // most-recent N (browser-defined) messages relating to a bug. |
| 18 // |
| 19 // The intent is that users will call RecordMsg() to record info for |
| 20 // the bug, and GetMessages() to fetch the recorded info. In the |
| 21 // browser process, these will be backed by a local data structure. |
| 22 // In other processes, they will be backed by messages forwarding to |
| 23 // the browser process. |
| 24 |
| 25 // TODO(shess): Since bug notes will be distributed across the code, |
| 26 // it would be inconvenient to require some other include to have |
| 27 // kBugNNNNN constants for users to use. Those could be in this file, |
| 28 // but for now they're a DCHECK in chrome_delegate_main.cc (which |
| 29 // implements the actual storage). |
| 30 |
| 31 namespace content { |
| 32 namespace debug { |
| 33 |
| 34 // RecordMsg() and GetMessages() forward to the handlers set by |
| 35 // RegisterMessageHandlers(). If no handlers are set (or NULL |
| 36 // handlers are set), the messages are simply dropped. |
| 37 // |
| 38 // If GetMessages() returns false, there was no handler (or the |
| 39 // handler was unable to get messages). *msgs will be cleared. If |
| 40 // GetMessages() returns true, zero or more of the most recent |
| 41 // messages previously sent to RecordMsg() will be in *msgs, in the |
| 42 // order recorded, mod things like forwarded delay between processes. |
| 43 CONTENT_EXPORT void RecordMsg(int bug_id, const std::string& msg); |
| 44 CONTENT_EXPORT bool GetMessages(int bug_id, std::vector<std::string>* msgs); |
| 45 |
| 46 // Used to register handlers which will differ per process. |
| 47 typedef void RecordMsgFn(int bug_id, const std::string& msg); |
| 48 typedef bool GetMessagesFn(int bug_id, std::vector<std::string>* msgs); |
| 49 CONTENT_EXPORT void RegisterMessageHandlers(RecordMsgFn* record_handler, |
| 50 GetMessagesFn* get_handler); |
| 51 |
| 52 // TODO(shess): It would be convenient to expose functions to do things like: |
| 53 // - load values into breakpad. |
| 54 // - load values into breakpad and dump without crashing. |
| 55 // - load values into breakpad and crash. |
| 56 // - log values to the console. |
| 57 // But this is mostly Chromium-level stuff. |
| 58 |
| 59 } // namespace debug |
| 60 } // namespace content |
| 61 |
| 62 #endif // CONTENT_PUBLIC_BROWSER_CONTENT_DEBUG_LOGGING_H_ |
| OLD | NEW |