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

Unified Diff: components/scheduler/base/task_queue_manager_unittest.cc

Issue 1447563002: Implement frame attribution (FrameBlamer) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make sure blame context is initialized early enough Created 4 years, 9 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
Index: components/scheduler/base/task_queue_manager_unittest.cc
diff --git a/components/scheduler/base/task_queue_manager_unittest.cc b/components/scheduler/base/task_queue_manager_unittest.cc
index 161b02b06e8e69c9b3ce0d46a96f6c86d3ba81fc..cc4e268423616df06c411e6914269337f85b1de7 100644
--- a/components/scheduler/base/task_queue_manager_unittest.cc
+++ b/components/scheduler/base/task_queue_manager_unittest.cc
@@ -8,10 +8,14 @@
#include <utility>
#include "base/location.h"
+#include "base/memory/ref_counted_memory.h"
#include "base/run_loop.h"
#include "base/single_thread_task_runner.h"
#include "base/test/simple_test_tick_clock.h"
+#include "base/test/trace_event_analyzer.h"
#include "base/threading/thread.h"
+#include "base/trace_event/blame_context.h"
+#include "base/trace_event/trace_buffer.h"
#include "cc/test/ordered_simple_task_runner.h"
#include "components/scheduler/base/real_time_domain.h"
#include "components/scheduler/base/task_queue_impl.h"
@@ -1842,4 +1846,73 @@ TEST_F(TaskQueueManagerTest, CurrentlyExecutingTaskQueue_NestedLoop) {
EXPECT_EQ(nullptr, manager_->currently_executing_task_queue());
}
+void OnTraceDataCollected(base::Closure quit_closure,
+ base::trace_event::TraceResultBuffer* buffer,
+ const scoped_refptr<base::RefCountedString>& json,
+ bool has_more_events) {
+ buffer->AddFragment(json->data());
+ if (!has_more_events)
+ quit_closure.Run();
+}
+
+class TaskQueueManagerTestWithTracing : public TaskQueueManagerTest {
+ public:
+ void StartTracing();
+ void StopTracing();
+ scoped_ptr<trace_analyzer::TraceAnalyzer> CreateTraceAnalyzer();
+};
+
+void TaskQueueManagerTestWithTracing::StartTracing() {
+ base::trace_event::TraceLog::GetInstance()->SetEnabled(
+ base::trace_event::TraceConfig("*"),
+ base::trace_event::TraceLog::RECORDING_MODE);
+}
+
+void TaskQueueManagerTestWithTracing::StopTracing() {
+ base::trace_event::TraceLog::GetInstance()->SetDisabled();
+}
+
+scoped_ptr<trace_analyzer::TraceAnalyzer>
+TaskQueueManagerTestWithTracing::CreateTraceAnalyzer() {
+ base::trace_event::TraceResultBuffer buffer;
+ base::trace_event::TraceResultBuffer::SimpleOutput trace_output;
+ buffer.SetOutputCallback(trace_output.GetCallback());
+ base::RunLoop run_loop;
+ buffer.Start();
+ base::trace_event::TraceLog::GetInstance()->Flush(
+ Bind(&OnTraceDataCollected, run_loop.QuitClosure(),
+ base::Unretained(&buffer)));
+ run_loop.Run();
+ buffer.Finish();
+
+ return make_scoped_ptr(
+ trace_analyzer::TraceAnalyzer::Create(trace_output.json_output));
+}
+
+TEST_F(TaskQueueManagerTestWithTracing, BlameContextAttribution) {
+ using trace_analyzer::Query;
+
+ Initialize(1u);
+ TaskQueue* queue = runners_[0].get();
+
+ StartTracing();
+ {
+ base::trace_event::BlameContext blame_context("cat", "name", "type",
+ "scope", 0, nullptr);
+ blame_context.Initialize();
+ queue->SetBlameContext(&blame_context);
+ queue->PostTask(FROM_HERE, base::Bind(&NopTask));
+ test_task_runner_->RunUntilIdle();
+ }
+ StopTracing();
+ scoped_ptr<trace_analyzer::TraceAnalyzer> analyzer = CreateTraceAnalyzer();
+
+ trace_analyzer::TraceEventVector events;
+ Query q = Query::EventPhaseIs(TRACE_EVENT_PHASE_ENTER_CONTEXT) ||
+ Query::EventPhaseIs(TRACE_EVENT_PHASE_LEAVE_CONTEXT);
+ analyzer->FindEvents(q, &events);
+
+ EXPECT_EQ(2u, events.size());
+}
+
} // namespace scheduler
« no previous file with comments | « components/scheduler/base/task_queue_impl.cc ('k') | components/scheduler/child/compositor_worker_scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698