[go: nahoru, domu]

oop: Create a RasterInterface, and use it for Compositor Worker contexts.

This CL enables RasterInterface for Compositor Worker contexts in
content/renderer and content/browser.

RasterInterface provides a subset of GLES2Interface APIs required for
OOP Rasterization.  This will gradually diverge away from GLES2.

The initial change adds a client-side implementation of
RasterInterface on top of GLES2Interface.

Design Doc: https://goo.gl/Q6E1ZC
BUG=757607

Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: Iaefd861f0c51b9995ad27eb94de2068d0f9dab22
Reviewed-on: https://chromium-review.googlesource.com/778242
Commit-Queue: Victor Miura <vmiura@chromium.org>
Reviewed-by: Sadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: danakj <danakj@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: vmpstr <vmpstr@chromium.org>
Reviewed-by: Bo <boliu@chromium.org>
Reviewed-by: Eric Karl <ericrk@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#523700}
diff --git a/cc/raster/gpu_raster_buffer_provider.cc b/cc/raster/gpu_raster_buffer_provider.cc
index ec0fc0a..f1d915e 100644
--- a/cc/raster/gpu_raster_buffer_provider.cc
+++ b/cc/raster/gpu_raster_buffer_provider.cc
@@ -21,6 +21,7 @@
 #include "cc/resources/resource.h"
 #include "gpu/command_buffer/client/context_support.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
+#include "gpu/command_buffer/client/raster_interface.h"
 #include "third_party/skia/include/core/SkMultiPictureDraw.h"
 #include "third_party/skia/include/core/SkPictureRecorder.h"
 #include "third_party/skia/include/core/SkSurface.h"
@@ -39,28 +40,28 @@
     const gfx::AxisTransform2d& transform,
     const RasterSource::PlaybackSettings& playback_settings,
     viz::ContextProvider* context_provider,
-    ResourceProvider::ScopedWriteLockGL* resource_lock,
+    ResourceProvider::ScopedWriteLockRaster* resource_lock,
     bool use_distance_field_text,
     int msaa_sample_count) {
-  gpu::gles2::GLES2Interface* gl = context_provider->ContextGL();
-  GLuint texture_id = resource_lock->ConsumeTexture(gl);
+  gpu::raster::RasterInterface* ri = context_provider->RasterContext();
+  GLuint texture_id = resource_lock->ConsumeTexture(ri);
 
-  gl->BeginRasterCHROMIUM(texture_id, raster_source->background_color(),
+  ri->BeginRasterCHROMIUM(texture_id, raster_source->background_color(),
                           msaa_sample_count, playback_settings.use_lcd_text,
                           use_distance_field_text,
                           resource_lock->PixelConfig());
   // TODO(enne): need to pass color space into this function as well.
   float recording_to_raster_scale =
       transform.scale() / raster_source->recording_scale_factor();
-  gl->RasterCHROMIUM(raster_source->GetDisplayItemList().get(),
+  ri->RasterCHROMIUM(raster_source->GetDisplayItemList().get(),
                      raster_full_rect.x(), raster_full_rect.y(),
                      playback_rect.x(), playback_rect.y(),
                      playback_rect.width(), playback_rect.height(),
                      transform.translation().x(), transform.translation().y(),
                      recording_to_raster_scale);
-  gl->EndRasterCHROMIUM();
+  ri->EndRasterCHROMIUM();
 
-  gl->DeleteTextures(1, &texture_id);
+  ri->DeleteTextures(1, &texture_id);
 }
 
 static void RasterizeSource(
@@ -72,13 +73,13 @@
     const gfx::AxisTransform2d& transform,
     const RasterSource::PlaybackSettings& playback_settings,
     viz::ContextProvider* context_provider,
-    ResourceProvider::ScopedWriteLockGL* resource_lock,
+    ResourceProvider::ScopedWriteLockRaster* resource_lock,
     bool use_distance_field_text,
     int msaa_sample_count) {
   ScopedGpuRaster gpu_raster(context_provider);
 
-  gpu::gles2::GLES2Interface* gl = context_provider->ContextGL();
-  GLuint texture_id = resource_lock->ConsumeTexture(gl);
+  gpu::raster::RasterInterface* ri = context_provider->RasterContext();
+  GLuint texture_id = resource_lock->ConsumeTexture(ri);
 
   {
     ResourceProvider::ScopedSkSurface scoped_surface(
@@ -106,7 +107,7 @@
         playback_rect, transform, playback_settings);
   }
 
-  gl->DeleteTextures(1, &texture_id);
+  ri->DeleteTextures(1, &texture_id);
 }
 
 }  // namespace
@@ -265,7 +266,7 @@
 }
 
 void GpuRasterBufferProvider::PlaybackOnWorkerThread(
-    ResourceProvider::ScopedWriteLockGL* resource_lock,
+    ResourceProvider::ScopedWriteLockRaster* resource_lock,
     const gpu::SyncToken& sync_token,
     bool resource_has_previous_content,
     const RasterSource* raster_source,
@@ -276,11 +277,11 @@
     const RasterSource::PlaybackSettings& playback_settings) {
   viz::ContextProvider::ScopedContextLock scoped_context(
       worker_context_provider_);
-  gpu::gles2::GLES2Interface* gl = scoped_context.ContextGL();
-  DCHECK(gl);
+  gpu::raster::RasterInterface* ri = scoped_context.RasterContext();
+  DCHECK(ri);
 
   // Synchronize with compositor. Nop if sync token is empty.
-  gl->WaitSyncTokenCHROMIUM(sync_token.GetConstData());
+  ri->WaitSyncTokenCHROMIUM(sync_token.GetConstData());
 
   gfx::Rect playback_rect = raster_full_rect;
   if (resource_has_previous_content) {
@@ -318,7 +319,7 @@
   }
 
   // Generate sync token for cross context synchronization.
-  resource_lock->set_sync_token(ResourceProvider::GenerateSyncTokenHelper(gl));
+  resource_lock->set_sync_token(ResourceProvider::GenerateSyncTokenHelper(ri));
 
   // Mark resource as synchronized when worker and compositor are in same stream
   // to prevent extra wait sync token calls.