summaryrefslogtreecommitdiffstats
path: root/blimp
diff options
context:
space:
mode:
authornyquist <nyquist@chromium.org>2016-02-11 16:15:04 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-12 00:16:29 +0000
commit16febb404edc59fb8dbb13a13c68ccecfb5a0bf1 (patch)
tree882135af7b509fdc7ccebb66193039c421871711 /blimp
parent23258d3c881e5c053f7bb687a13f860ea55364ef (diff)
downloadchromium_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.cc7
-rw-r--r--blimp/client/feature/compositor/blimp_compositor.h4
-rw-r--r--blimp/common/BUILD.gn2
-rw-r--r--blimp/common/compositor/blimp_image_serialization_processor.cc50
-rw-r--r--blimp/common/compositor/blimp_image_serialization_processor.h42
-rw-r--r--blimp/engine/app/blimp_content_main_delegate.cc7
-rw-r--r--blimp/engine/app/blimp_content_renderer_client.cc11
-rw-r--r--blimp/engine/app/blimp_content_renderer_client.h9
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);
};