diff options
author | jbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-12 04:14:56 +0000 |
---|---|---|
committer | jbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-12 04:14:56 +0000 |
commit | b57b69790fbdae509e58fe1591af4b0f3ee045b3 (patch) | |
tree | d38ff0b652ffe8fb0a41e046bcafd4a473330c54 /gpu | |
parent | f19c4af8bd22a8940fde4867def0afa7716020e0 (diff) | |
download | chromium_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.cc | 27 | ||||
-rw-r--r-- | gpu/common/gpu_trace_event.h | 4 |
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; |