diff options
author | nyquist <nyquist@chromium.org> | 2016-02-11 16:15:04 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-12 00:16:29 +0000 |
commit | 16febb404edc59fb8dbb13a13c68ccecfb5a0bf1 (patch) | |
tree | 882135af7b509fdc7ccebb66193039c421871711 /blimp | |
parent | 23258d3c881e5c053f7bb687a13f860ea55364ef (diff) | |
download | chromium_src-16febb404edc59fb8dbb13a13c68ccecfb5a0bf1.zip chromium_src-16febb404edc59fb8dbb13a13c68ccecfb5a0bf1.tar.gz chromium_src-16febb404edc59fb8dbb13a13c68ccecfb5a0bf1.tar.bz2 |
Add framework for (de)serialization of images in SkPicture
This CL adds Plumbing for picture serialization and deserialization
from //blimp to DrawingDisplayItem.
BUG=577262
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1675763002
Cr-Commit-Position: refs/heads/master@{#375053}
Diffstat (limited to 'blimp')
-rw-r--r-- | blimp/client/feature/compositor/blimp_compositor.cc | 7 | ||||
-rw-r--r-- | blimp/client/feature/compositor/blimp_compositor.h | 4 | ||||
-rw-r--r-- | blimp/common/BUILD.gn | 2 | ||||
-rw-r--r-- | blimp/common/compositor/blimp_image_serialization_processor.cc | 50 | ||||
-rw-r--r-- | blimp/common/compositor/blimp_image_serialization_processor.h | 42 | ||||
-rw-r--r-- | blimp/engine/app/blimp_content_main_delegate.cc | 7 | ||||
-rw-r--r-- | blimp/engine/app/blimp_content_renderer_client.cc | 11 | ||||
-rw-r--r-- | blimp/engine/app/blimp_content_renderer_client.h | 9 |
8 files changed, 128 insertions, 4 deletions
diff --git a/blimp/client/feature/compositor/blimp_compositor.cc b/blimp/client/feature/compositor/blimp_compositor.cc index 1205745..e420d570 100644 --- a/blimp/client/feature/compositor/blimp_compositor.cc +++ b/blimp/client/feature/compositor/blimp_compositor.cc @@ -17,6 +17,7 @@ #include "blimp/client/feature/compositor/blimp_layer_tree_settings.h" #include "blimp/client/feature/compositor/blimp_output_surface.h" #include "blimp/client/feature/render_widget_feature.h" +#include "blimp/common/compositor/blimp_image_serialization_processor.h" #include "blimp/common/compositor/blimp_task_graph_runner.h" #include "cc/layers/layer.h" #include "cc/layers/layer_settings.h" @@ -44,7 +45,10 @@ BlimpCompositor::BlimpCompositor(float dp_to_px, host_should_be_visible_(false), output_surface_request_pending_(false), remote_proto_channel_receiver_(nullptr), - render_widget_feature_(render_widget_feature) { + render_widget_feature_(render_widget_feature), + image_serialization_processor_( + make_scoped_ptr(new BlimpImageSerializationProcessor( + BlimpImageSerializationProcessor::Mode::DESERIALIZATION))) { DCHECK(render_widget_feature_); render_widget_feature_->SetDelegate(kDummyTabId, this); } @@ -244,6 +248,7 @@ void BlimpCompositor::CreateLayerTreeHost( params.gpu_memory_buffer_manager = &gpu_memory_buffer_manager_; params.main_task_runner = base::ThreadTaskRunnerHandle::Get(); params.settings = settings_.get(); + params.image_serialization_processor = image_serialization_processor_.get(); // TODO(khushalsagar): Add the GpuMemoryBufferManager to params diff --git a/blimp/client/feature/compositor/blimp_compositor.h b/blimp/client/feature/compositor/blimp_compositor.h index 6879da0..3f14994 100644 --- a/blimp/client/feature/compositor/blimp_compositor.h +++ b/blimp/client/feature/compositor/blimp_compositor.h @@ -36,6 +36,7 @@ class LayerTreeHost; namespace blimp { +class BlimpImageSerializationProcessor; class BlimpMessage; namespace client { @@ -187,6 +188,9 @@ class BLIMP_CLIENT_EXPORT BlimpCompositor // widget. scoped_ptr<BlimpInputManager> input_manager_; + // Provides the functionality to deserialize images in SkPicture. + scoped_ptr<BlimpImageSerializationProcessor> image_serialization_processor_; + DISALLOW_COPY_AND_ASSIGN(BlimpCompositor); }; diff --git a/blimp/common/BUILD.gn b/blimp/common/BUILD.gn index 5b7ba5a..1835b40 100644 --- a/blimp/common/BUILD.gn +++ b/blimp/common/BUILD.gn @@ -7,6 +7,8 @@ import("//testing/test.gni") component("blimp_common") { sources = [ "blimp_common_export.h", + "compositor/blimp_image_serialization_processor.cc", + "compositor/blimp_image_serialization_processor.h", "compositor/blimp_task_graph_runner.cc", "compositor/blimp_task_graph_runner.h", "create_blimp_message.cc", diff --git a/blimp/common/compositor/blimp_image_serialization_processor.cc b/blimp/common/compositor/blimp_image_serialization_processor.cc new file mode 100644 index 0000000..36ea6af --- /dev/null +++ b/blimp/common/compositor/blimp_image_serialization_processor.cc @@ -0,0 +1,50 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "blimp/common/compositor/blimp_image_serialization_processor.h" + +#include <stddef.h> +#include <vector> + +#include "base/logging.h" +#include "third_party/skia/include/core/SkPicture.h" +#include "third_party/skia/include/core/SkPixelSerializer.h" + +namespace { +bool NoopDecoder(const void* input, size_t input_size, SkBitmap* bitmap) { + // TODO(nyquist): Add an image decoder. + return false; +} + +} // namespace + +namespace blimp { + +BlimpImageSerializationProcessor::BlimpImageSerializationProcessor(Mode mode) { + switch (mode) { + case Mode::SERIALIZATION: + pixel_serializer_ = nullptr; + pixel_deserializer_ = nullptr; + break; + case Mode::DESERIALIZATION: + pixel_serializer_ = nullptr; + pixel_deserializer_ = &NoopDecoder; + break; + default: + NOTREACHED() << "Unknown serialization mode"; + } +} + +BlimpImageSerializationProcessor::~BlimpImageSerializationProcessor() {} + +SkPixelSerializer* BlimpImageSerializationProcessor::GetPixelSerializer() { + return pixel_serializer_.get(); +} + +SkPicture::InstallPixelRefProc +BlimpImageSerializationProcessor::GetPixelDeserializer() { + return pixel_deserializer_; +} + +} // namespace blimp diff --git a/blimp/common/compositor/blimp_image_serialization_processor.h b/blimp/common/compositor/blimp_image_serialization_processor.h new file mode 100644 index 0000000..040f245 --- /dev/null +++ b/blimp/common/compositor/blimp_image_serialization_processor.h @@ -0,0 +1,42 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BLIMP_COMMON_COMPOSITOR_BLIMP_IMAGE_SERIALIZATION_PROCESSOR_H_ +#define BLIMP_COMMON_COMPOSITOR_BLIMP_IMAGE_SERIALIZATION_PROCESSOR_H_ + +#include "base/macros.h" +#include "base/memory/scoped_ptr.h" +#include "blimp/common/blimp_common_export.h" +#include "cc/proto/image_serialization_processor.h" +#include "third_party/skia/include/core/SkPicture.h" + +class SkPixelSerializer; + +namespace blimp { + +// BlimpImageSerializationProcessor provides functionality to serialize and +// deserialize Skia images. +class BLIMP_COMMON_EXPORT BlimpImageSerializationProcessor + : public cc::ImageSerializationProcessor { + public: + // Denotes whether the BlimpImageSerializationProcessor should act as a + // serializer (engine) or deserializer (client). + enum class Mode { SERIALIZATION, DESERIALIZATION }; + explicit BlimpImageSerializationProcessor(Mode mode); + ~BlimpImageSerializationProcessor(); + + // cc::ImageSerializationProcessor implementation. + SkPixelSerializer* GetPixelSerializer() override; + SkPicture::InstallPixelRefProc GetPixelDeserializer() override; + + private: + scoped_ptr<SkPixelSerializer> pixel_serializer_; + SkPicture::InstallPixelRefProc pixel_deserializer_; + + DISALLOW_COPY_AND_ASSIGN(BlimpImageSerializationProcessor); +}; + +} // namespace blimp + +#endif // BLIMP_COMMON_COMPOSITOR_BLIMP_IMAGE_SERIALIZATION_PROCESSOR_H_ diff --git a/blimp/engine/app/blimp_content_main_delegate.cc b/blimp/engine/app/blimp_content_main_delegate.cc index cd60b9f..6fe0b41 100644 --- a/blimp/engine/app/blimp_content_main_delegate.cc +++ b/blimp/engine/app/blimp_content_main_delegate.cc @@ -8,6 +8,7 @@ #include "base/files/file_path.h" #include "base/logging.h" #include "base/path_service.h" +#include "blimp/common/compositor/blimp_image_serialization_processor.h" #include "blimp/engine/app/blimp_content_browser_client.h" #include "blimp/engine/app/blimp_content_renderer_client.h" #include "ui/base/resource/resource_bundle.h" @@ -63,7 +64,11 @@ BlimpContentMainDelegate::CreateContentBrowserClient() { content::ContentRendererClient* BlimpContentMainDelegate::CreateContentRendererClient() { DCHECK(!renderer_client_); - renderer_client_.reset(new BlimpContentRendererClient); + scoped_ptr<BlimpImageSerializationProcessor> image_serialization_processor = + make_scoped_ptr(new BlimpImageSerializationProcessor( + BlimpImageSerializationProcessor::Mode::SERIALIZATION)); + renderer_client_.reset( + new BlimpContentRendererClient(std::move(image_serialization_processor))); return renderer_client_.get(); } diff --git a/blimp/engine/app/blimp_content_renderer_client.cc b/blimp/engine/app/blimp_content_renderer_client.cc index c9e51ae..43b388d 100644 --- a/blimp/engine/app/blimp_content_renderer_client.cc +++ b/blimp/engine/app/blimp_content_renderer_client.cc @@ -4,13 +4,17 @@ #include "blimp/engine/app/blimp_content_renderer_client.h" +#include "blimp/common/compositor/blimp_image_serialization_processor.h" #include "components/web_cache/renderer/web_cache_render_process_observer.h" #include "content/public/renderer/render_thread.h" namespace blimp { namespace engine { -BlimpContentRendererClient::BlimpContentRendererClient() {} +BlimpContentRendererClient::BlimpContentRendererClient( + scoped_ptr<BlimpImageSerializationProcessor> image_serialization_processor) + : image_serialization_processor_(std::move(image_serialization_processor)) { +} BlimpContentRendererClient::~BlimpContentRendererClient() {} @@ -19,5 +23,10 @@ void BlimpContentRendererClient::RenderThreadStarted() { content::RenderThread::Get()->AddObserver(web_cache_observer_.get()); } +cc::ImageSerializationProcessor* +BlimpContentRendererClient::GetImageSerializationProcessor() { + return image_serialization_processor_.get(); +} + } // namespace engine } // namespace blimp diff --git a/blimp/engine/app/blimp_content_renderer_client.h b/blimp/engine/app/blimp_content_renderer_client.h index 56e9cc0..8e86966 100644 --- a/blimp/engine/app/blimp_content_renderer_client.h +++ b/blimp/engine/app/blimp_content_renderer_client.h @@ -14,20 +14,27 @@ class WebCacheRenderProcessObserver; } namespace blimp { +class BlimpImageSerializationProcessor; + namespace engine { class BlimpContentRendererClient : public content::ContentRendererClient { public: - BlimpContentRendererClient(); + BlimpContentRendererClient(scoped_ptr<BlimpImageSerializationProcessor> + image_serialization_processor); ~BlimpContentRendererClient() override; // content::ContentRendererClient implementation. void RenderThreadStarted() override; + cc::ImageSerializationProcessor* GetImageSerializationProcessor() override; private: // This observer manages the process-global web cache. scoped_ptr<web_cache::WebCacheRenderProcessObserver> web_cache_observer_; + // Provides the functionality to serialize images in SkPicture. + scoped_ptr<BlimpImageSerializationProcessor> image_serialization_processor_; + DISALLOW_COPY_AND_ASSIGN(BlimpContentRendererClient); }; |