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

Unified Diff: base/debug/trace_event.h

Issue 7866026: Added trace query code and wired tracing through BrowserProxy so tests can run traces. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 9 years, 3 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/base.gypi ('k') | base/debug/trace_event.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/debug/trace_event.h
diff --git a/base/debug/trace_event.h b/base/debug/trace_event.h
index e7b3f90066ac8631099d0f39a8558ec517b7f810..cf78fd0833898592e5f15487971e866cf4f5457f 100644
--- a/base/debug/trace_event.h
+++ b/base/debug/trace_event.h
@@ -97,6 +97,7 @@
#include "build/build_config.h"
+#include <map>
#include <string>
#include <vector>
@@ -311,6 +312,7 @@
namespace base {
class RefCountedString;
+class Value;
namespace debug {
@@ -403,6 +405,10 @@ class BASE_EXPORT TraceValue {
return value;
}
+ bool is_string() const {
+ return type_ == TRACE_TYPE_STRING || type_ == TRACE_TYPE_STATIC_STRING;
+ }
+
void AppendAsJSON(std::string* out) const;
Type type() const {
@@ -429,7 +435,7 @@ class BASE_EXPORT TraceValue {
return value_.as_pointer;
}
const char* as_string() const {
- DCHECK(type_ == TRACE_TYPE_STRING || type_ == TRACE_TYPE_STATIC_STRING);
+ DCHECK(is_string());
return value_.as_string;
}
const char** as_assignable_string() {
@@ -451,6 +457,64 @@ class BASE_EXPORT TraceValue {
Value value_;
};
+// TestTraceEvent is a more convenient form of the TraceEvent class to make
+// tracing-based tests easier to write.
+struct TestTraceEvent {
+ // PidTid contains a Process ID and Thread ID.
+ struct PidTid {
+ PidTid() : pid(0), tid(0) {}
+ PidTid(int pid, int tid) : pid(pid), tid(tid) {}
+ bool operator< (PidTid rhs) const {
+ if (pid != rhs.pid)
+ return pid < rhs.pid;
+ return tid < rhs.tid;
+ }
+ int pid;
+ int tid;
+ };
+
+ TestTraceEvent();
+ TestTraceEvent(const base::Value* event_value);
+ ~TestTraceEvent();
+
+ // Convert JSON string to array of TestTraceEvent.
+ // |output| is appended with the parsed events.
+ static bool ParseEventsFromJson(const std::string& json,
+ std::vector<TestTraceEvent>* output);
+
+ bool operator< (const TestTraceEvent& rhs) const {
+ return timestamp < rhs.timestamp;
+ }
+
+ // Returns duration if it's available.
+ bool GetDuration(double* duration) const;
+
+ // Return the argument value if it exists.
+ bool IsArg(const std::string& name) const;
+ // Return the argument value if it exists and it is a string.
+ bool GetArgAsString(const std::string& name, std::string* arg) const;
+ // Return the argument value if it exists and it is a number.
+ bool GetArgAsNumber(const std::string& name, double* arg) const;
+
+ // Called by TraceAnalyzer to associate two events.
+ void SetAssociatedEvent(TestTraceEvent* event);
+
+ // Process ID and Thread ID.
+ PidTid pid_tid;
+ // Time since epoch in microseconds.
+ // Stored as double to match its JSON representation.
+ double timestamp;
+ TraceEventPhase phase;
+ std::string category;
+ std::string name;
+ // All numbers and bool values from TraceEvent args are cast to double.
+ // bool becomes 1.0 (true) or 0.0 (false).
+ std::map<std::string, double> arg_numbers;
+ std::map<std::string, std::string> arg_strings;
+ // Set by TraceAnalyzer to point between matching BEGIN and END events.
+ const TestTraceEvent* associated_event;
+};
+
// Output records are "Events" and can be obtained via the
// OutputCallback whenever the tracing system decides to flush. This
// can happen at any time, on any thread, or you can programatically
« no previous file with comments | « base/base.gypi ('k') | base/debug/trace_event.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698