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

Unified Diff: content/browser/compositor/mus_browser_compositor_output_surface.cc

Issue 2056833002: WIP HW (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 6 months 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
Index: content/browser/compositor/mus_browser_compositor_output_surface.cc
diff --git a/content/browser/compositor/gpu_browser_compositor_output_surface.cc b/content/browser/compositor/mus_browser_compositor_output_surface.cc
similarity index 58%
copy from content/browser/compositor/gpu_browser_compositor_output_surface.cc
copy to content/browser/compositor/mus_browser_compositor_output_surface.cc
index a17c34db3ebcf02766d3433ac8528115f412a894..679b91e0aabb4a6ec3fe3f293283c2b35fdb1ad1 100644
--- a/content/browser/compositor/gpu_browser_compositor_output_surface.cc
+++ b/content/browser/compositor/mus_browser_compositor_output_surface.cc
@@ -1,25 +1,33 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
+// 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 "content/browser/compositor/gpu_browser_compositor_output_surface.h"
+#include "content/browser/compositor/mus_browser_compositor_output_surface.h"
#include <utility>
#include "build/build_config.h"
#include "cc/output/compositor_frame.h"
+#include "cc/output/compositor_frame_ack.h"
#include "cc/output/output_surface_client.h"
#include "components/display_compositor/compositor_overlay_candidate_validator.h"
+#include "components/mus/common/gpu_service.h"
+#include "components/mus/public/cpp/surfaces/surfaces_type_converters.h"
+#include "components/mus/public/cpp/window.h"
+#include "components/mus/public/cpp/window_surface.h"
#include "content/browser/compositor/reflector_impl.h"
#include "content/browser/compositor/reflector_texture.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/common/gpu/client/context_provider_command_buffer.h"
#include "gpu/command_buffer/client/context_support.h"
#include "gpu/ipc/client/command_buffer_proxy_impl.h"
+#include "ui/views/mus/native_widget_mus.h"
+#include "ui/views/mus/window_tree_host_mus.h"
namespace content {
-GpuBrowserCompositorOutputSurface::GpuBrowserCompositorOutputSurface(
+MusBrowserCompositorOutputSurface::MusBrowserCompositorOutputSurface(
+ gpu::SurfaceHandle surface_handle,
scoped_refptr<ContextProviderCommandBuffer> context,
scoped_refptr<ui::CompositorVSyncManager> vsync_manager,
cc::SyntheticBeginFrameSource* begin_frame_source,
@@ -30,16 +38,24 @@ GpuBrowserCompositorOutputSurface::GpuBrowserCompositorOutputSurface(
begin_frame_source,
std::move(overlay_candidate_validator)),
swap_buffers_completion_callback_(base::Bind(
- &GpuBrowserCompositorOutputSurface::OnGpuSwapBuffersCompleted,
+ &MusBrowserCompositorOutputSurface::OnGpuSwapBuffersCompleted,
base::Unretained(this))),
update_vsync_parameters_callback_(base::Bind(
&BrowserCompositorOutputSurface::OnUpdateVSyncParametersFromGpu,
- base::Unretained(this))) {}
+ base::Unretained(this))) {
+ capabilities_.delegated_rendering = true;
+ views::WindowTreeHostMus* window_tree_host =
+ static_cast<views::WindowTreeHostMus*>(
+ aura::WindowTreeHost::GetForAcceleratedWidget(surface_handle));
+ mus::Window* window = window_tree_host->native_widget()->window();
+ mus_window_surface_ =
+ window->RequestSurface(mus::mojom::SurfaceType::DEFAULT);
+}
-GpuBrowserCompositorOutputSurface::~GpuBrowserCompositorOutputSurface() {}
+MusBrowserCompositorOutputSurface::~MusBrowserCompositorOutputSurface() {}
gpu::CommandBufferProxyImpl*
-GpuBrowserCompositorOutputSurface::GetCommandBufferProxy() {
+MusBrowserCompositorOutputSurface::GetCommandBufferProxy() {
ContextProviderCommandBuffer* provider_command_buffer =
static_cast<content::ContextProviderCommandBuffer*>(
context_provider_.get());
@@ -49,8 +65,19 @@ GpuBrowserCompositorOutputSurface::GetCommandBufferProxy() {
return command_buffer_proxy;
}
-bool GpuBrowserCompositorOutputSurface::BindToClient(
+void MusBrowserCompositorOutputSurface::OnResourcesReturned(
+ mus::WindowSurface* surface,
+ mojo::Array<cc::ReturnedResource> resources) {
+ cc::CompositorFrameAck cfa;
+ cfa.resources = resources.To<cc::ReturnedResourceArray>();
+ ReclaimResources(&cfa);
+}
+
+bool MusBrowserCompositorOutputSurface::BindToClient(
cc::OutputSurfaceClient* client) {
+ mus_window_surface_->BindToThread();
+ mus_window_surface_->set_client(this);
+
if (!BrowserCompositorOutputSurface::BindToClient(client))
return false;
@@ -65,7 +92,7 @@ bool GpuBrowserCompositorOutputSurface::BindToClient(
return true;
}
-void GpuBrowserCompositorOutputSurface::OnReflectorChanged() {
+void MusBrowserCompositorOutputSurface::OnReflectorChanged() {
if (!reflector_) {
reflector_texture_.reset();
} else {
@@ -74,36 +101,24 @@ void GpuBrowserCompositorOutputSurface::OnReflectorChanged() {
}
}
-void GpuBrowserCompositorOutputSurface::SwapBuffers(
+void MusBrowserCompositorOutputSurface::SwapBuffers(
cc::CompositorFrame* frame) {
- DCHECK(frame->gl_frame_data);
-
+ DCHECK(frame->delegated_frame_data);
GetCommandBufferProxy()->SetLatencyInfo(frame->metadata.latency_info);
- if (reflector_) {
- if (frame->gl_frame_data->sub_buffer_rect ==
- gfx::Rect(frame->gl_frame_data->size)) {
- reflector_texture_->CopyTextureFullImage(SurfaceSize());
- reflector_->OnSourceSwapBuffers();
- } else {
- const gfx::Rect& rect = frame->gl_frame_data->sub_buffer_rect;
- reflector_texture_->CopyTextureSubImage(rect);
- reflector_->OnSourcePostSubBuffer(rect);
- }
- }
+ // TODO(fsamuel, rjkroege): We should probably throttle compositor frames.
+ client_->DidSwapBuffers();
- if (frame->gl_frame_data->sub_buffer_rect ==
- gfx::Rect(frame->gl_frame_data->size)) {
- context_provider_->ContextSupport()->Swap();
- } else {
- context_provider_->ContextSupport()->PartialSwapBuffers(
- frame->gl_frame_data->sub_buffer_rect);
- }
+ mus_window_surface_->SubmitCompositorFrame(
+ cc::mojom::CompositorFrame::From(*frame),
+ base::Bind(&MusBrowserCompositorOutputSurface::OnSwapBuffersComplete,
+ base::Unretained(this)));
- client_->DidSwapBuffers();
+ // TODO(penghuang): figure how to handle reflector.
+ return;
}
-void GpuBrowserCompositorOutputSurface::OnGpuSwapBuffersCompleted(
+void MusBrowserCompositorOutputSurface::OnGpuSwapBuffersCompleted(
const std::vector<ui::LatencyInfo>& latency_info,
gfx::SwapResult result,
const gpu::GpuProcessHostedCALayerTreeParamsMac* params_mac) {
@@ -112,7 +127,7 @@ void GpuBrowserCompositorOutputSurface::OnGpuSwapBuffersCompleted(
}
#if defined(OS_MACOSX)
-void GpuBrowserCompositorOutputSurface::SetSurfaceSuspendedForRecycle(
+void MusBrowserCompositorOutputSurface::SetSurfaceSuspendedForRecycle(
bool suspended) {}
#endif

Powered by Google App Engine
This is Rietveld 408576698