[//cc] Fold BitmapRasterBufferProvider into ZeroCopyRasterBufferProvider
Makes the minimal adjustments to the latter necessary to have it behave exactly as the former when used with software compositing. Bug: 403372453 Change-Id: Ida8e3ed630a30ae8300a708de94e55324e8c407d Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6401014 Commit-Queue: Colin Blundell <blundell@chromium.org> Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org> Cr-Commit-Position: refs/heads/main@{#1439280}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
fec5b6a205
commit
7df30f3236
@ -229,8 +229,6 @@ cc_component("cc") {
|
|||||||
"metrics/ukm_smoothness_data.h",
|
"metrics/ukm_smoothness_data.h",
|
||||||
"metrics/video_playback_roughness_reporter.cc",
|
"metrics/video_playback_roughness_reporter.cc",
|
||||||
"metrics/video_playback_roughness_reporter.h",
|
"metrics/video_playback_roughness_reporter.h",
|
||||||
"raster/bitmap_raster_buffer_provider.cc",
|
|
||||||
"raster/bitmap_raster_buffer_provider.h",
|
|
||||||
"raster/categorized_worker_pool.cc",
|
"raster/categorized_worker_pool.cc",
|
||||||
"raster/categorized_worker_pool.h",
|
"raster/categorized_worker_pool.h",
|
||||||
"raster/gpu_raster_buffer_provider.cc",
|
"raster/gpu_raster_buffer_provider.cc",
|
||||||
|
@ -1,83 +0,0 @@
|
|||||||
// Copyright 2014 The Chromium Authors
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#include "cc/raster/bitmap_raster_buffer_provider.h"
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
#include "base/memory/raw_ptr.h"
|
|
||||||
#include "base/trace_event/process_memory_dump.h"
|
|
||||||
#include "base/trace_event/trace_event.h"
|
|
||||||
#include "base/trace_event/traced_value.h"
|
|
||||||
#include "cc/raster/raster_buffer.h"
|
|
||||||
#include "cc/raster/zero_copy_raster_buffer_provider.h"
|
|
||||||
#include "cc/trees/layer_tree_frame_sink.h"
|
|
||||||
#include "components/viz/client/client_resource_provider.h"
|
|
||||||
#include "components/viz/common/resources/shared_image_format.h"
|
|
||||||
#include "gpu/command_buffer/client/client_shared_image.h"
|
|
||||||
#include "gpu/command_buffer/common/shared_image_usage.h"
|
|
||||||
#include "gpu/ipc/client/client_shared_image_interface.h"
|
|
||||||
#include "ui/gfx/color_space.h"
|
|
||||||
#include "url/gurl.h"
|
|
||||||
|
|
||||||
namespace cc {
|
|
||||||
|
|
||||||
BitmapRasterBufferProvider::BitmapRasterBufferProvider(
|
|
||||||
LayerTreeFrameSink* frame_sink)
|
|
||||||
: shared_image_interface_(frame_sink->shared_image_interface()) {
|
|
||||||
CHECK(shared_image_interface_)
|
|
||||||
<< "SharedImageInterface is null in BitmapRasterBufferProvider ctor!";
|
|
||||||
}
|
|
||||||
|
|
||||||
BitmapRasterBufferProvider::~BitmapRasterBufferProvider() = default;
|
|
||||||
|
|
||||||
std::unique_ptr<RasterBuffer>
|
|
||||||
BitmapRasterBufferProvider::AcquireBufferForRaster(
|
|
||||||
const ResourcePool::InUsePoolResource& resource,
|
|
||||||
uint64_t resource_content_id,
|
|
||||||
uint64_t previous_content_id,
|
|
||||||
bool depends_on_at_raster_decodes,
|
|
||||||
bool depends_on_hardware_accelerated_jpeg_candidates,
|
|
||||||
bool depends_on_hardware_accelerated_webp_candidates) {
|
|
||||||
bool resource_has_previous_content =
|
|
||||||
resource_content_id && resource_content_id == previous_content_id;
|
|
||||||
return std::make_unique<ZeroCopyRasterBufferImpl>(
|
|
||||||
resource, shared_image_interface_, resource_has_previous_content,
|
|
||||||
/*is_software=*/true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BitmapRasterBufferProvider::Flush() {}
|
|
||||||
|
|
||||||
viz::SharedImageFormat BitmapRasterBufferProvider::GetFormat() const {
|
|
||||||
return viz::SinglePlaneFormat::kBGRA_8888;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BitmapRasterBufferProvider::IsResourcePremultiplied() const {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BitmapRasterBufferProvider::CanPartialRasterIntoProvidedResource() const {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BitmapRasterBufferProvider::IsResourceReadyToDraw(
|
|
||||||
const ResourcePool::InUsePoolResource& resource) {
|
|
||||||
// Bitmap resources are immediately ready to draw.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t BitmapRasterBufferProvider::SetReadyToDrawCallback(
|
|
||||||
const std::vector<const ResourcePool::InUsePoolResource*>& resources,
|
|
||||||
base::OnceClosure callback,
|
|
||||||
uint64_t pending_callback_id) {
|
|
||||||
// Bitmap resources are immediately ready to draw.
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BitmapRasterBufferProvider::Shutdown() {}
|
|
||||||
|
|
||||||
} // namespace cc
|
|
@ -1,70 +0,0 @@
|
|||||||
// Copyright 2014 The Chromium Authors
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#ifndef CC_RASTER_BITMAP_RASTER_BUFFER_PROVIDER_H_
|
|
||||||
#define CC_RASTER_BITMAP_RASTER_BUFFER_PROVIDER_H_
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "base/memory/raw_ptr.h"
|
|
||||||
#include "cc/raster/raster_buffer_provider.h"
|
|
||||||
|
|
||||||
namespace base {
|
|
||||||
namespace trace_event {
|
|
||||||
class ConvertableToTraceFormat;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace gpu {
|
|
||||||
class SharedImageInterface;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace cc {
|
|
||||||
class LayerTreeFrameSink;
|
|
||||||
|
|
||||||
class CC_EXPORT BitmapRasterBufferProvider : public RasterBufferProvider {
|
|
||||||
public:
|
|
||||||
BitmapRasterBufferProvider(const BitmapRasterBufferProvider&) = delete;
|
|
||||||
~BitmapRasterBufferProvider() override;
|
|
||||||
|
|
||||||
BitmapRasterBufferProvider& operator=(const BitmapRasterBufferProvider&) =
|
|
||||||
delete;
|
|
||||||
|
|
||||||
explicit BitmapRasterBufferProvider(LayerTreeFrameSink* frame_sink);
|
|
||||||
|
|
||||||
// Overridden from RasterBufferProvider:
|
|
||||||
std::unique_ptr<RasterBuffer> AcquireBufferForRaster(
|
|
||||||
const ResourcePool::InUsePoolResource& resource,
|
|
||||||
uint64_t resource_content_id,
|
|
||||||
uint64_t previous_content_id,
|
|
||||||
bool depends_on_at_raster_decodes,
|
|
||||||
bool depends_on_hardware_accelerated_jpeg_candidates,
|
|
||||||
bool depends_on_hardware_accelerated_webp_candidates) override;
|
|
||||||
viz::SharedImageFormat GetFormat() const override;
|
|
||||||
bool IsResourcePremultiplied() const override;
|
|
||||||
bool CanPartialRasterIntoProvidedResource() const override;
|
|
||||||
bool IsResourceReadyToDraw(
|
|
||||||
const ResourcePool::InUsePoolResource& resource) override;
|
|
||||||
uint64_t SetReadyToDrawCallback(
|
|
||||||
const std::vector<const ResourcePool::InUsePoolResource*>& resources,
|
|
||||||
base::OnceClosure callback,
|
|
||||||
uint64_t pending_callback_id) override;
|
|
||||||
void Shutdown() override;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void Flush() override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::unique_ptr<base::trace_event::ConvertableToTraceFormat> StateAsValue()
|
|
||||||
const;
|
|
||||||
|
|
||||||
scoped_refptr<gpu::SharedImageInterface> shared_image_interface_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace cc
|
|
||||||
|
|
||||||
#endif // CC_RASTER_BITMAP_RASTER_BUFFER_PROVIDER_H_
|
|
@ -20,7 +20,6 @@
|
|||||||
#include "base/time/time.h"
|
#include "base/time/time.h"
|
||||||
#include "base/timer/lap_timer.h"
|
#include "base/timer/lap_timer.h"
|
||||||
#include "build/build_config.h"
|
#include "build/build_config.h"
|
||||||
#include "cc/raster/bitmap_raster_buffer_provider.h"
|
|
||||||
#include "cc/raster/gpu_raster_buffer_provider.h"
|
#include "cc/raster/gpu_raster_buffer_provider.h"
|
||||||
#include "cc/raster/one_copy_raster_buffer_provider.h"
|
#include "cc/raster/one_copy_raster_buffer_provider.h"
|
||||||
#include "cc/raster/raster_query_queue.h"
|
#include "cc/raster/raster_query_queue.h"
|
||||||
@ -394,8 +393,9 @@ class RasterBufferProviderPerfTest
|
|||||||
break;
|
break;
|
||||||
case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
|
case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
|
||||||
CreateSoftwareResourceProvider();
|
CreateSoftwareResourceProvider();
|
||||||
raster_buffer_provider_ = std::make_unique<BitmapRasterBufferProvider>(
|
raster_buffer_provider_ =
|
||||||
layer_tree_frame_sink_.get());
|
std::make_unique<ZeroCopyRasterBufferProvider>(
|
||||||
|
layer_tree_frame_sink_.get());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DCHECK(raster_buffer_provider_);
|
DCHECK(raster_buffer_provider_);
|
||||||
@ -561,7 +561,7 @@ class RasterBufferProviderPerfTest
|
|||||||
case RASTER_BUFFER_PROVIDER_TYPE_GPU:
|
case RASTER_BUFFER_PROVIDER_TYPE_GPU:
|
||||||
return std::string("_gpu_raster_buffer_provider");
|
return std::string("_gpu_raster_buffer_provider");
|
||||||
case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
|
case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
|
||||||
return std::string("_bitmap_raster_buffer_provider");
|
return std::string("_sw_compositing_zero_copy_raster_buffer_provider");
|
||||||
}
|
}
|
||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
#include "build/build_config.h"
|
#include "build/build_config.h"
|
||||||
#include "cc/base/unique_notifier.h"
|
#include "cc/base/unique_notifier.h"
|
||||||
#include "cc/paint/draw_image.h"
|
#include "cc/paint/draw_image.h"
|
||||||
#include "cc/raster/bitmap_raster_buffer_provider.h"
|
|
||||||
#include "cc/raster/gpu_raster_buffer_provider.h"
|
#include "cc/raster/gpu_raster_buffer_provider.h"
|
||||||
#include "cc/raster/one_copy_raster_buffer_provider.h"
|
#include "cc/raster/one_copy_raster_buffer_provider.h"
|
||||||
#include "cc/raster/raster_query_queue.h"
|
#include "cc/raster/raster_query_queue.h"
|
||||||
@ -200,8 +199,9 @@ class RasterBufferProviderTest
|
|||||||
break;
|
break;
|
||||||
case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
|
case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
|
||||||
CreateSoftwareResourceProvider();
|
CreateSoftwareResourceProvider();
|
||||||
raster_buffer_provider_ = std::make_unique<BitmapRasterBufferProvider>(
|
raster_buffer_provider_ =
|
||||||
layer_tree_frame_sink_.get());
|
std::make_unique<ZeroCopyRasterBufferProvider>(
|
||||||
|
layer_tree_frame_sink_.get());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "base/trace_event/trace_event.h"
|
#include "base/trace_event/trace_event.h"
|
||||||
#include "base/trace_event/traced_value.h"
|
#include "base/trace_event/traced_value.h"
|
||||||
#include "cc/resources/resource_pool.h"
|
#include "cc/resources/resource_pool.h"
|
||||||
|
#include "cc/trees/layer_tree_frame_sink.h"
|
||||||
#include "components/viz/client/client_resource_provider.h"
|
#include "components/viz/client/client_resource_provider.h"
|
||||||
#include "components/viz/common/gpu/raster_context_provider.h"
|
#include "components/viz/common/gpu/raster_context_provider.h"
|
||||||
#include "components/viz/common/resources/platform_color.h"
|
#include "components/viz/common/resources/platform_color.h"
|
||||||
@ -22,6 +23,7 @@
|
|||||||
#include "gpu/command_buffer/client/shared_image_interface.h"
|
#include "gpu/command_buffer/client/shared_image_interface.h"
|
||||||
#include "gpu/command_buffer/common/shared_image_trace_utils.h"
|
#include "gpu/command_buffer/common/shared_image_trace_utils.h"
|
||||||
#include "gpu/command_buffer/common/shared_image_usage.h"
|
#include "gpu/command_buffer/common/shared_image_usage.h"
|
||||||
|
#include "gpu/ipc/client/client_shared_image_interface.h"
|
||||||
#include "ui/gfx/buffer_format_util.h"
|
#include "ui/gfx/buffer_format_util.h"
|
||||||
#include "url/gurl.h"
|
#include "url/gurl.h"
|
||||||
|
|
||||||
@ -42,7 +44,8 @@ ZeroCopyRasterBufferImpl::ZeroCopyRasterBufferImpl(
|
|||||||
is_software_(is_software) {
|
is_software_(is_software) {
|
||||||
if (!in_use_resource.backing()) {
|
if (!in_use_resource.backing()) {
|
||||||
if (is_software) {
|
if (is_software) {
|
||||||
in_use_resource.InstallSoftwareBacking(sii, "BitmapRasterBufferProvider");
|
in_use_resource.InstallSoftwareBacking(
|
||||||
|
sii, "ZeroCopyRasterBufferProviderSoftware");
|
||||||
in_use_resource.backing()->mailbox_sync_token =
|
in_use_resource.backing()->mailbox_sync_token =
|
||||||
sii->GenVerifiedSyncToken();
|
sii->GenVerifiedSyncToken();
|
||||||
} else {
|
} else {
|
||||||
@ -168,6 +171,14 @@ ZeroCopyRasterBufferProvider::ZeroCopyRasterBufferProvider(
|
|||||||
: compositor_context_provider_(compositor_context_provider),
|
: compositor_context_provider_(compositor_context_provider),
|
||||||
tile_format_(raster_caps.tile_format) {}
|
tile_format_(raster_caps.tile_format) {}
|
||||||
|
|
||||||
|
ZeroCopyRasterBufferProvider::ZeroCopyRasterBufferProvider(
|
||||||
|
LayerTreeFrameSink* frame_sink)
|
||||||
|
: is_software_(true),
|
||||||
|
shared_image_interface_(frame_sink->shared_image_interface()) {
|
||||||
|
CHECK(shared_image_interface_)
|
||||||
|
<< "SharedImageInterface is null in ZeroCopyRasterBufferProvider ctor!";
|
||||||
|
}
|
||||||
|
|
||||||
ZeroCopyRasterBufferProvider::~ZeroCopyRasterBufferProvider() = default;
|
ZeroCopyRasterBufferProvider::~ZeroCopyRasterBufferProvider() = default;
|
||||||
|
|
||||||
std::unique_ptr<RasterBuffer>
|
std::unique_ptr<RasterBuffer>
|
||||||
@ -178,6 +189,14 @@ ZeroCopyRasterBufferProvider::AcquireBufferForRaster(
|
|||||||
bool depends_on_at_raster_decodes,
|
bool depends_on_at_raster_decodes,
|
||||||
bool depends_on_hardware_accelerated_jpeg_candidates,
|
bool depends_on_hardware_accelerated_jpeg_candidates,
|
||||||
bool depends_on_hardware_accelerated_webp_candidates) {
|
bool depends_on_hardware_accelerated_webp_candidates) {
|
||||||
|
if (is_software_) {
|
||||||
|
bool resource_has_previous_content =
|
||||||
|
resource_content_id && resource_content_id == previous_content_id;
|
||||||
|
return std::make_unique<ZeroCopyRasterBufferImpl>(
|
||||||
|
resource, shared_image_interface_, resource_has_previous_content,
|
||||||
|
/*is_software=*/true);
|
||||||
|
}
|
||||||
|
|
||||||
return std::make_unique<ZeroCopyRasterBufferImpl>(
|
return std::make_unique<ZeroCopyRasterBufferImpl>(
|
||||||
resource,
|
resource,
|
||||||
base::WrapRefCounted(
|
base::WrapRefCounted(
|
||||||
@ -188,7 +207,7 @@ ZeroCopyRasterBufferProvider::AcquireBufferForRaster(
|
|||||||
void ZeroCopyRasterBufferProvider::Flush() {}
|
void ZeroCopyRasterBufferProvider::Flush() {}
|
||||||
|
|
||||||
viz::SharedImageFormat ZeroCopyRasterBufferProvider::GetFormat() const {
|
viz::SharedImageFormat ZeroCopyRasterBufferProvider::GetFormat() const {
|
||||||
return tile_format_;
|
return (is_software_) ? viz::SinglePlaneFormat::kBGRA_8888 : tile_format_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ZeroCopyRasterBufferProvider::IsResourcePremultiplied() const {
|
bool ZeroCopyRasterBufferProvider::IsResourcePremultiplied() const {
|
||||||
@ -197,7 +216,7 @@ bool ZeroCopyRasterBufferProvider::IsResourcePremultiplied() const {
|
|||||||
|
|
||||||
bool ZeroCopyRasterBufferProvider::CanPartialRasterIntoProvidedResource()
|
bool ZeroCopyRasterBufferProvider::CanPartialRasterIntoProvidedResource()
|
||||||
const {
|
const {
|
||||||
return false;
|
return is_software_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ZeroCopyRasterBufferProvider::IsResourceReadyToDraw(
|
bool ZeroCopyRasterBufferProvider::IsResourceReadyToDraw(
|
||||||
|
@ -22,7 +22,12 @@ class ConvertableToTraceFormat;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace gpu {
|
||||||
|
class SharedImageInterface;
|
||||||
|
}
|
||||||
|
|
||||||
namespace cc {
|
namespace cc {
|
||||||
|
class LayerTreeFrameSink;
|
||||||
|
|
||||||
// RasterBuffer for the zero copy upload, which is given to the raster worker
|
// RasterBuffer for the zero copy upload, which is given to the raster worker
|
||||||
// threads for raster/upload.
|
// threads for raster/upload.
|
||||||
@ -65,6 +70,10 @@ class CC_EXPORT ZeroCopyRasterBufferProvider : public RasterBufferProvider {
|
|||||||
ZeroCopyRasterBufferProvider(
|
ZeroCopyRasterBufferProvider(
|
||||||
viz::RasterContextProvider* compositor_context_provider,
|
viz::RasterContextProvider* compositor_context_provider,
|
||||||
const RasterCapabilities& raster_caps);
|
const RasterCapabilities& raster_caps);
|
||||||
|
|
||||||
|
// Constructor used with software compositing.
|
||||||
|
explicit ZeroCopyRasterBufferProvider(LayerTreeFrameSink* frame_sink);
|
||||||
|
|
||||||
ZeroCopyRasterBufferProvider(const ZeroCopyRasterBufferProvider&) = delete;
|
ZeroCopyRasterBufferProvider(const ZeroCopyRasterBufferProvider&) = delete;
|
||||||
~ZeroCopyRasterBufferProvider() override;
|
~ZeroCopyRasterBufferProvider() override;
|
||||||
|
|
||||||
@ -97,8 +106,14 @@ class CC_EXPORT ZeroCopyRasterBufferProvider : public RasterBufferProvider {
|
|||||||
std::unique_ptr<base::trace_event::ConvertableToTraceFormat> StateAsValue()
|
std::unique_ptr<base::trace_event::ConvertableToTraceFormat> StateAsValue()
|
||||||
const;
|
const;
|
||||||
|
|
||||||
|
bool is_software_ = false;
|
||||||
|
|
||||||
|
// Used with the GPU compositor.
|
||||||
raw_ptr<viz::RasterContextProvider> compositor_context_provider_;
|
raw_ptr<viz::RasterContextProvider> compositor_context_provider_;
|
||||||
const viz::SharedImageFormat tile_format_;
|
const viz::SharedImageFormat tile_format_;
|
||||||
|
|
||||||
|
// Used with the software compositor.
|
||||||
|
scoped_refptr<gpu::SharedImageInterface> shared_image_interface_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace cc
|
} // namespace cc
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
#include "base/task/single_thread_task_runner.h"
|
#include "base/task/single_thread_task_runner.h"
|
||||||
#include "cc/layers/layer.h"
|
#include "cc/layers/layer.h"
|
||||||
#include "cc/raster/bitmap_raster_buffer_provider.h"
|
|
||||||
#include "cc/raster/gpu_raster_buffer_provider.h"
|
#include "cc/raster/gpu_raster_buffer_provider.h"
|
||||||
#include "cc/raster/one_copy_raster_buffer_provider.h"
|
#include "cc/raster/one_copy_raster_buffer_provider.h"
|
||||||
#include "cc/raster/raster_buffer_provider.h"
|
#include "cc/raster/raster_buffer_provider.h"
|
||||||
@ -77,7 +76,7 @@ LayerTreeHostPixelResourceTest::CreateRasterBufferProvider(
|
|||||||
EXPECT_FALSE(compositor_context_provider);
|
EXPECT_FALSE(compositor_context_provider);
|
||||||
EXPECT_TRUE(use_software_renderer());
|
EXPECT_TRUE(use_software_renderer());
|
||||||
|
|
||||||
return std::make_unique<BitmapRasterBufferProvider>(
|
return std::make_unique<ZeroCopyRasterBufferProvider>(
|
||||||
host_impl->layer_tree_frame_sink());
|
host_impl->layer_tree_frame_sink());
|
||||||
case TestRasterType::kGpu:
|
case TestRasterType::kGpu:
|
||||||
EXPECT_TRUE(compositor_context_provider);
|
EXPECT_TRUE(compositor_context_provider);
|
||||||
|
@ -81,7 +81,6 @@
|
|||||||
#include "cc/paint/display_item_list.h"
|
#include "cc/paint/display_item_list.h"
|
||||||
#include "cc/paint/paint_worklet_job.h"
|
#include "cc/paint/paint_worklet_job.h"
|
||||||
#include "cc/paint/paint_worklet_layer_painter.h"
|
#include "cc/paint/paint_worklet_layer_painter.h"
|
||||||
#include "cc/raster/bitmap_raster_buffer_provider.h"
|
|
||||||
#include "cc/raster/gpu_raster_buffer_provider.h"
|
#include "cc/raster/gpu_raster_buffer_provider.h"
|
||||||
#include "cc/raster/one_copy_raster_buffer_provider.h"
|
#include "cc/raster/one_copy_raster_buffer_provider.h"
|
||||||
#include "cc/raster/raster_buffer_provider.h"
|
#include "cc/raster/raster_buffer_provider.h"
|
||||||
@ -4191,7 +4190,8 @@ LayerTreeHostImpl::CreateRasterBufferProvider() {
|
|||||||
layer_tree_frame_sink_->context_provider();
|
layer_tree_frame_sink_->context_provider();
|
||||||
|
|
||||||
if (!compositor_context_provider) {
|
if (!compositor_context_provider) {
|
||||||
return std::make_unique<BitmapRasterBufferProvider>(layer_tree_frame_sink_);
|
return std::make_unique<ZeroCopyRasterBufferProvider>(
|
||||||
|
layer_tree_frame_sink_);
|
||||||
}
|
}
|
||||||
|
|
||||||
const gpu::Capabilities& caps =
|
const gpu::Capabilities& caps =
|
||||||
|
@ -269,12 +269,13 @@ Chrome never mixes software compositing with hardware raster, but the other thre
|
|||||||
|
|
||||||
The compositing mode affects the choice of RasterBufferProvider that cc provides, which manages the raster process and resource management on the raster worker threads:
|
The compositing mode affects the choice of RasterBufferProvider that cc provides, which manages the raster process and resource management on the raster worker threads:
|
||||||
|
|
||||||
* BitmapRasterBufferProvider: rasters software bitmaps for software compositing
|
* ZeroCopyRasterBufferProvider: rasters software bitmaps (a) for software
|
||||||
|
compositing into shared memory that is read directly by the software compositor
|
||||||
|
and (b) for gpu compositing directly into a GpuMemoryBuffer (e.g. IOSurface),
|
||||||
|
which is memory that can be mapped by CPU and used by the GPU
|
||||||
|
|
||||||
* OneCopyRasterBufferProvider: rasters software bitmaps for gpu compositing into shared memory, which are then uploaded to gpu memory in the gpu process
|
* OneCopyRasterBufferProvider: rasters software bitmaps for gpu compositing into shared memory, which are then uploaded to gpu memory in the gpu process
|
||||||
|
|
||||||
* ZeroCopyRasterBufferProvider: rasters software bitmaps for gpu compositing directly into a GpuMemoryBuffer (e.g. IOSurface), which is memory that can be mapped by CPU and used by the GPU
|
|
||||||
|
|
||||||
* GpuRasterBufferProvider: rasters gpu textures for gpu compositing over a command buffer via paint commands (for gpu raster)
|
* GpuRasterBufferProvider: rasters gpu textures for gpu compositing over a command buffer via paint commands (for gpu raster)
|
||||||
|
|
||||||
Note, due to locks on the context, gpu raster is limited to one worker thread at a time, although image decoding can proceed in parallel on other threads.
|
Note, due to locks on the context, gpu raster is limited to one worker thread at a time, although image decoding can proceed in parallel on other threads.
|
||||||
|
Reference in New Issue
Block a user