Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Unified Diff: ui/compositor/test/in_process_context_factory.cc

Issue 2498053004: Add InProcessContextProvider and update InProcessCommandBuffer (Closed)
Patch Set: Revert experiments and fix android_webview Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/compositor/test/in_process_context_factory.h ('k') | ui/compositor/test/in_process_context_provider.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/compositor/test/in_process_context_factory.cc
diff --git a/ui/compositor/test/in_process_context_factory.cc b/ui/compositor/test/in_process_context_factory.cc
index 42dd8b51c350b8115de56e86f054925bc811e745..a6a88a2410942938e63fe8194132f171b1855694 100644
--- a/ui/compositor/test/in_process_context_factory.cc
+++ b/ui/compositor/test/in_process_context_factory.cc
@@ -32,6 +32,10 @@
#include "ui/gl/gl_implementation.h"
#include "ui/gl/test/gl_surface_test_support.h"
+#if !defined(GPU_SURFACE_HANDLE_IS_ACCELERATED_WINDOW)
+#include "gpu/ipc/common/gpu_surface_tracker.h"
+#endif
+
namespace ui {
namespace {
@@ -113,6 +117,11 @@ class DirectOutputSurface : public cc::OutputSurface {
} // namespace
+struct InProcessContextFactory::PerCompositorData {
+ gpu::SurfaceHandle surface_handle = gpu::kNullSurfaceHandle;
+ std::unique_ptr<cc::Display> display;
+};
+
InProcessContextFactory::InProcessContextFactory(
bool context_factory_for_test,
cc::SurfaceManager* surface_manager)
@@ -166,10 +175,14 @@ void InProcessContextFactory::CreateCompositorFrameSink(
attribs.sample_buffers = 0;
attribs.fail_if_major_perf_caveat = false;
attribs.bind_generates_resource = false;
+ PerCompositorData* data = per_compositor_data_[compositor.get()].get();
+ if (!data)
+ data = CreatePerCompositorData(compositor.get());
+
scoped_refptr<InProcessContextProvider> context_provider =
InProcessContextProvider::Create(
attribs, shared_worker_context_provider_.get(),
- &gpu_memory_buffer_manager_, &image_factory_, compositor->widget(),
+ &gpu_memory_buffer_manager_, &image_factory_, data->surface_handle,
"UICompositor");
std::unique_ptr<cc::OutputSurface> display_output_surface;
@@ -189,14 +202,15 @@ void InProcessContextFactory::CreateCompositorFrameSink(
std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler(
begin_frame_source.get(), compositor->task_runner().get(),
display_output_surface->capabilities().max_frames_pending));
- per_compositor_data_[compositor.get()] = base::MakeUnique<cc::Display>(
+
+ data->display = base::MakeUnique<cc::Display>(
&shared_bitmap_manager_, &gpu_memory_buffer_manager_,
compositor->GetRendererSettings(), compositor->frame_sink_id(),
std::move(begin_frame_source), std::move(display_output_surface),
std::move(scheduler), base::MakeUnique<cc::TextureMailboxDeleter>(
compositor->task_runner().get()));
- auto* display = per_compositor_data_[compositor.get()].get();
+ auto* display = per_compositor_data_[compositor.get()]->display.get();
auto compositor_frame_sink = base::MakeUnique<cc::DirectCompositorFrameSink>(
compositor->frame_sink_id(), surface_manager_, display, context_provider,
shared_worker_context_provider_, &gpu_memory_buffer_manager_,
@@ -230,9 +244,16 @@ InProcessContextFactory::SharedMainThreadContextProvider() {
}
void InProcessContextFactory::RemoveCompositor(Compositor* compositor) {
- if (!per_compositor_data_.count(compositor))
+ PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor);
+ if (it == per_compositor_data_.end())
return;
- per_compositor_data_.erase(compositor);
+ PerCompositorData* data = it->second.get();
+ DCHECK(data);
+#if !defined(GPU_SURFACE_HANDLE_IS_ACCELERATED_WINDOW)
+ if (data->surface_handle)
+ gpu::GpuSurfaceTracker::Get()->RemoveSurface(data->surface_handle);
+#endif
+ per_compositor_data_.erase(it);
}
bool InProcessContextFactory::DoesCreateTestContexts() {
@@ -266,14 +287,14 @@ void InProcessContextFactory::SetDisplayVisible(ui::Compositor* compositor,
bool visible) {
if (!per_compositor_data_.count(compositor))
return;
- per_compositor_data_[compositor]->SetVisible(visible);
+ per_compositor_data_[compositor]->display->SetVisible(visible);
}
void InProcessContextFactory::ResizeDisplay(ui::Compositor* compositor,
const gfx::Size& size) {
if (!per_compositor_data_.count(compositor))
return;
- per_compositor_data_[compositor]->Resize(size);
+ per_compositor_data_[compositor]->display->Resize(size);
}
void InProcessContextFactory::AddObserver(ContextFactoryObserver* observer) {
@@ -284,4 +305,27 @@ void InProcessContextFactory::RemoveObserver(ContextFactoryObserver* observer) {
observer_list_.RemoveObserver(observer);
}
+InProcessContextFactory::PerCompositorData*
+InProcessContextFactory::CreatePerCompositorData(ui::Compositor* compositor) {
+ DCHECK(!per_compositor_data_[compositor]);
+
+ gfx::AcceleratedWidget widget = compositor->widget();
+
+ auto data = base::MakeUnique<PerCompositorData>();
+ if (widget == gfx::kNullAcceleratedWidget) {
+ data->surface_handle = gpu::kNullSurfaceHandle;
+ } else {
+#if defined(GPU_SURFACE_HANDLE_IS_ACCELERATED_WINDOW)
+ data->surface_handle = widget;
+#else
+ gpu::GpuSurfaceTracker* tracker = gpu::GpuSurfaceTracker::Get();
+ data->surface_handle = tracker->AddSurfaceForNativeWidget(widget);
+#endif
+ }
+
+ PerCompositorData* return_ptr = data.get();
+ per_compositor_data_[compositor] = std::move(data);
+ return return_ptr;
+}
+
} // namespace ui
« no previous file with comments | « ui/compositor/test/in_process_context_factory.h ('k') | ui/compositor/test/in_process_context_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698