summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorjbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-12 04:14:56 +0000
committerjbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-12 04:14:56 +0000
commitb57b69790fbdae509e58fe1591af4b0f3ee045b3 (patch)
treed38ff0b652ffe8fb0a41e046bcafd4a473330c54 /gpu
parentf19c4af8bd22a8940fde4867def0afa7716020e0 (diff)
downloadchromium_src-b57b69790fbdae509e58fe1591af4b0f3ee045b3.zip
chromium_src-b57b69790fbdae509e58fe1591af4b0f3ee045b3.tar.gz
chromium_src-b57b69790fbdae509e58fe1591af4b0f3ee045b3.tar.bz2
Don't flush trace events until tracing ends.
Flushing trace events really disrupts the traced process, so don't flush events until tracing has finished. The events would be stored in memory after they were flushed anyway, so this doesn't change much. For this to work we must make sure to flush the events in small batches, so the send doesn't reject them. Also add a limit of around 500000 on the number of trace events, so we don't run out of space due to them. BUG= TEST= Review URL: http://codereview.chromium.org/6826043 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@81210 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r--gpu/common/gpu_trace_event.cc27
-rw-r--r--gpu/common/gpu_trace_event.h4
2 files changed, 19 insertions, 12 deletions
diff --git a/gpu/common/gpu_trace_event.cc b/gpu/common/gpu_trace_event.cc
index 1a3edfc..af6c16e 100644
--- a/gpu/common/gpu_trace_event.cc
+++ b/gpu/common/gpu_trace_event.cc
@@ -17,8 +17,9 @@ using namespace base;
namespace gpu {
// Controls the number of trace events we will buffer in-memory
-// before flushing them.
-#define TRACE_EVENT_BUFFER_SIZE 16384
+// before throwing them away.
+#define TRACE_EVENT_BUFFER_SIZE 500000
+#define TRACE_EVENT_BATCH_SIZE 1000
////////////////////////////////////////////////////////////////////////////////
//
@@ -71,12 +72,14 @@ TraceEvent::~TraceEvent() {
void TraceEvent::AppendAsJSON(std::string* out,
- const std::vector<TraceEvent>& events) {
+ const std::vector<TraceEvent>& events,
+ size_t start,
+ size_t count) {
*out += "[";
- for (size_t i = 0; i < events.size(); ++i) {
+ for (size_t i = 0; i < count && start + i < events.size(); ++i) {
if (i > 0)
*out += ",";
- events[i].AppendAsJSON(out);
+ events[i + start].AppendAsJSON(out);
}
*out += "]";
}
@@ -187,9 +190,12 @@ void TraceLog::Flush() {
void TraceLog::FlushWithLockAlreadyHeld() {
if (output_callback_.get() && logged_events_.size()) {
- std::string json_events;
- TraceEvent::AppendAsJSON(&json_events, logged_events_);
- output_callback_->Run(json_events);
+ for (size_t i = 0; i < logged_events_.size(); i += TRACE_EVENT_BATCH_SIZE) {
+ std::string json_events;
+ TraceEvent::AppendAsJSON(&json_events, logged_events_,
+ i, TRACE_EVENT_BATCH_SIZE);
+ output_callback_->Run(json_events);
+ }
}
logged_events_.erase(logged_events_.begin(), logged_events_.end());
}
@@ -208,6 +214,8 @@ void TraceLog::AddTraceEvent(TraceEventPhase phase,
#endif
//static_cast<unsigned long>(base::GetCurrentProcId()),
AutoLock lock(lock_);
+ if (logged_events_.size() >= TRACE_EVENT_BUFFER_SIZE)
+ return;
logged_events_.push_back(TraceEvent());
TraceEvent& event = logged_events_.back();
event.processId = static_cast<unsigned long>(base::GetCurrentProcId());
@@ -221,9 +229,6 @@ void TraceLog::AddTraceEvent(TraceEventPhase phase,
event.argNames[1] = arg2name;
event.argValues[1] = arg2name ? arg2val : "";
COMPILE_ASSERT(TRACE_MAX_NUM_ARGS == 2, TraceEvent_arc_count_out_of_sync);
-
- if (logged_events_.size() > TRACE_EVENT_BUFFER_SIZE)
- FlushWithLockAlreadyHeld();
}
} // namespace gpu
diff --git a/gpu/common/gpu_trace_event.h b/gpu/common/gpu_trace_event.h
index 8a74f93..8e4a176 100644
--- a/gpu/common/gpu_trace_event.h
+++ b/gpu/common/gpu_trace_event.h
@@ -186,7 +186,9 @@ enum TraceEventPhase {
// force it to happen.
struct TraceEvent {
static void AppendAsJSON(std::string* out,
- const std::vector<TraceEvent>& events);
+ const std::vector<TraceEvent>& events,
+ size_t start,
+ size_t count);
TraceEvent();
~TraceEvent();
void AppendAsJSON(std::string* out) const;