diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/components/viz/common/gpu | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/components/viz/common/gpu')
6 files changed, 49 insertions, 6 deletions
diff --git a/chromium/components/viz/common/gpu/context_cache_controller_unittest.cc b/chromium/components/viz/common/gpu/context_cache_controller_unittest.cc index c380ea621e7..03696829f15 100644 --- a/chromium/components/viz/common/gpu/context_cache_controller_unittest.cc +++ b/chromium/components/viz/common/gpu/context_cache_controller_unittest.cc @@ -177,7 +177,7 @@ TEST(ContextCacheControllerTest, CheckSkiaResourcePurgeAPI) { SkPixmap pixmap(image_info, image_data.data(), image_info.minRowBytes()); auto image = SkImage::MakeRasterCopy(pixmap); auto image_gpu = image->makeTextureImage(gr_context); - gr_context->flush(); + gr_context->flushAndSubmit(); } // Ensure we see size taken up for the image (now released, but cached for diff --git a/chromium/components/viz/common/gpu/context_lost_reason.h b/chromium/components/viz/common/gpu/context_lost_reason.h index 823b5c5b822..9a4ea393e59 100644 --- a/chromium/components/viz/common/gpu/context_lost_reason.h +++ b/chromium/components/viz/common/gpu/context_lost_reason.h @@ -26,12 +26,14 @@ enum ContextLostReason { CONTEXT_LOST_OUT_OF_MEMORY = 10, CONTEXT_LOST_MAKECURRENT_FAILED = 11, CONTEXT_LOST_INVALID_GPU_MESSAGE = 12, - // SkiaRenderer marked context as lost because of failed Reshape call CONTEXT_LOST_RESHAPE_FAILED = 13, - // Update kMaxValue and //tools/metrics/histograms/histograms.xml when adding - // new values. - kMaxValue = CONTEXT_LOST_RESHAPE_FAILED + CONTEXT_LOST_SET_DRAW_RECTANGLE_FAILED = 14, + CONTEXT_LOST_DIRECT_COMPOSITION_OVERLAY_FAILED = 15, + CONTEXT_LOST_SWAP_FAILED = 16, + // Update kMaxValue here and <enum name="ContextLostReason"> in + // tools/metrics/histograms/enum.xml when adding new values. + kMaxValue = CONTEXT_LOST_SWAP_FAILED }; VIZ_COMMON_EXPORT ContextLostReason diff --git a/chromium/components/viz/common/gpu/metal_api_proxy.h b/chromium/components/viz/common/gpu/metal_api_proxy.h index 39c1a1a2a03..c32a55c3ea1 100644 --- a/chromium/components/viz/common/gpu/metal_api_proxy.h +++ b/chromium/components/viz/common/gpu/metal_api_proxy.h @@ -5,6 +5,9 @@ #ifndef COMPONENTS_VIZ_COMMON_GPU_METAL_API_PROXY_H_ #define COMPONENTS_VIZ_COMMON_GPU_METAL_API_PROXY_H_ +#include <memory> +#include <string> + #import <Metal/Metal.h> #include <os/availability.h> diff --git a/chromium/components/viz/common/gpu/metal_context_provider.mm b/chromium/components/viz/common/gpu/metal_context_provider.mm index f3d7e1d49f9..40e0c5c2390 100644 --- a/chromium/components/viz/common/gpu/metal_context_provider.mm +++ b/chromium/components/viz/common/gpu/metal_context_provider.mm @@ -7,6 +7,7 @@ #import <Metal/Metal.h> #include "base/bind.h" +#include "base/logging.h" #include "base/mac/scoped_nsobject.h" #include "base/memory/ref_counted.h" #include "base/metrics/histogram_macros.h" diff --git a/chromium/components/viz/common/gpu/vulkan_in_process_context_provider.cc b/chromium/components/viz/common/gpu/vulkan_in_process_context_provider.cc index 204fea1b374..4d098c579d1 100644 --- a/chromium/components/viz/common/gpu/vulkan_in_process_context_provider.cc +++ b/chromium/components/viz/common/gpu/vulkan_in_process_context_provider.cc @@ -4,6 +4,8 @@ #include "components/viz/common/gpu/vulkan_in_process_context_provider.h" +#include "base/task/thread_pool.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "gpu/vulkan/buildflags.h" #include "gpu/vulkan/init/gr_vk_memory_allocator_impl.h" #include "gpu/vulkan/vulkan_device_queue.h" @@ -12,9 +14,30 @@ #include "gpu/vulkan/vulkan_implementation.h" #include "gpu/vulkan/vulkan_instance.h" #include "gpu/vulkan/vulkan_util.h" +#include "third_party/skia/include/core/SkExecutor.h" #include "third_party/skia/include/gpu/GrContext.h" #include "third_party/skia/include/gpu/vk/GrVkExtensions.h" +namespace { + +class VizExecutor : public SkExecutor { + public: + VizExecutor() = default; + ~VizExecutor() override = default; + VizExecutor(const VizExecutor&) = delete; + VizExecutor& operator=(const VizExecutor&) = delete; + + // std::function is used by SkExecutor in //third_party/skia. nocheck + using Fn = std::function<void(void)>; // nocheck + // SkExecutor: + void add(Fn task) override { + base::ThreadPool::PostTask( + FROM_HERE, base::BindOnce([](Fn task) { task(); }, std::move(task))); + } +}; + +} // namespace + namespace viz { // static @@ -102,7 +125,16 @@ bool VulkanInProcessContextProvider::Initialize( vulkan_implementation_->enforce_protected_memory() ? GrProtected::kYes : GrProtected::kNo; - gr_context_ = GrContext::MakeVulkan(backend_context, context_options); + GrContextOptions options; + if (base::ThreadPoolInstance::Get()) { + // For some tests, ThreadPoolInstance is not initialized. VizExecutor will + // not be used for this case. + // TODO(penghuang): Make sure ThreadPoolInstance is initialized for related + // tests. + executor_ = std::make_unique<VizExecutor>(); + options.fExecutor = executor_.get(); + } + gr_context_ = GrContext::MakeVulkan(backend_context, options); return gr_context_ != nullptr; } @@ -122,6 +154,8 @@ void VulkanInProcessContextProvider::Destroy() { gr_context_.reset(); } + executor_.reset(); + if (device_queue_) { device_queue_->Destroy(); device_queue_.reset(); diff --git a/chromium/components/viz/common/gpu/vulkan_in_process_context_provider.h b/chromium/components/viz/common/gpu/vulkan_in_process_context_provider.h index 1215dff230d..05ea0a5c815 100644 --- a/chromium/components/viz/common/gpu/vulkan_in_process_context_provider.h +++ b/chromium/components/viz/common/gpu/vulkan_in_process_context_provider.h @@ -16,6 +16,8 @@ #include "third_party/skia/include/gpu/vk/GrVkBackendContext.h" #endif +class SkExecutor; + namespace gpu { class VulkanImplementation; class VulkanDeviceQueue; @@ -53,6 +55,7 @@ class VIZ_VULKAN_CONTEXT_PROVIDER_EXPORT VulkanInProcessContextProvider #if BUILDFLAG(ENABLE_VULKAN) sk_sp<GrContext> gr_context_; + std::unique_ptr<SkExecutor> executor_; gpu::VulkanImplementation* vulkan_implementation_; std::unique_ptr<gpu::VulkanDeviceQueue> device_queue_; #endif |