Index: cc/surfaces/display.cc |
diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc |
index 70367e4bcfd625c4836bf6d4f87fb45fca3249b8..a1b566802d0496261828b550e5400f5db45d4672 100644 |
--- a/cc/surfaces/display.cc |
+++ b/cc/surfaces/display.cc |
@@ -15,13 +15,18 @@ |
#include "cc/surfaces/surface.h" |
#include "cc/surfaces/surface_aggregator.h" |
#include "cc/surfaces/surface_manager.h" |
+#include "cc/trees/blocking_task_runner.h" |
namespace cc { |
Display::Display(DisplayClient* client, |
SurfaceManager* manager, |
SharedBitmapManager* bitmap_manager) |
- : client_(client), manager_(manager), bitmap_manager_(bitmap_manager) { |
+ : client_(client), |
+ manager_(manager), |
+ bitmap_manager_(bitmap_manager), |
+ blocking_main_thread_task_runner_( |
+ BlockingTaskRunner::Create(base::MessageLoopProxy::current())) { |
manager_->AddObserver(this); |
} |
@@ -49,6 +54,7 @@ void Display::InitializeOutputSurface() { |
scoped_ptr<ResourceProvider> resource_provider = |
ResourceProvider::Create(output_surface.get(), |
bitmap_manager_, |
+ blocking_main_thread_task_runner_.get(), |
highp_threshold_min, |
use_rgba_4444_texture_format, |
id_allocation_chunk_size, |
@@ -89,6 +95,8 @@ bool Display::Draw() { |
if (!output_surface_) |
return false; |
+ // TODO(skyostil): We should hold a BlockingTaskRunner::CapturePostTasks |
+ // while Aggregate is called to immediately run release callbacks afterward. |
scoped_ptr<CompositorFrame> frame = |
aggregator_->Aggregate(current_surface_id_); |
if (!frame) |