summaryrefslogtreecommitdiffstats
path: root/content/browser/gpu/gpu_process_host.cc
diff options
context:
space:
mode:
authoralexst <alexst@chromium.org>2014-12-08 12:19:08 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-08 20:19:46 +0000
commit6934562f7d5890a16186810dd1d89712fe88b135 (patch)
treec0aa724a94c757baf8a4a0dd8107fae5a064184b /content/browser/gpu/gpu_process_host.cc
parentf271a6c0399df3f40c761c3481f9887257a46dea (diff)
downloadchromium_src-6934562f7d5890a16186810dd1d89712fe88b135.zip
chromium_src-6934562f7d5890a16186810dd1d89712fe88b135.tar.gz
chromium_src-6934562f7d5890a16186810dd1d89712fe88b135.tar.bz2
Plumb surface id to GpuMemoryBuffer allocation.
We need to know which display controller to use for allocation of scanout buffers in situations where an external USB monitor is connected. BUG=432550 Review URL: https://codereview.chromium.org/725723002 Cr-Commit-Position: refs/heads/master@{#307317}
Diffstat (limited to 'content/browser/gpu/gpu_process_host.cc')
-rw-r--r--content/browser/gpu/gpu_process_host.cc25
1 files changed, 23 insertions, 2 deletions
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc
index 2d04cb9..2f90e67 100644
--- a/content/browser/gpu/gpu_process_host.cc
+++ b/content/browser/gpu/gpu_process_host.cc
@@ -657,14 +657,28 @@ void GpuProcessHost::CreateGpuMemoryBuffer(
gfx::GpuMemoryBuffer::Format format,
gfx::GpuMemoryBuffer::Usage usage,
int client_id,
+ int32 surface_id,
const CreateGpuMemoryBufferCallback& callback) {
TRACE_EVENT0("gpu", "GpuProcessHost::CreateGpuMemoryBuffer");
DCHECK(CalledOnValidThread());
- if (Send(new GpuMsg_CreateGpuMemoryBuffer(
- id, size, format, usage, client_id))) {
+ GpuMsg_CreateGpuMemoryBuffer_Params params;
+ params.id = id;
+ params.size = size;
+ params.format = format;
+ params.usage = usage;
+ params.client_id = client_id;
+ params.surface_handle =
+ GpuSurfaceTracker::GetInstance()->GetSurfaceHandle(surface_id).handle;
+ if (Send(new GpuMsg_CreateGpuMemoryBuffer(params))) {
create_gpu_memory_buffer_requests_.push(callback);
+ create_gpu_memory_buffer_surface_refs_.push(surface_id);
+ if (surface_id) {
+ surface_refs_.insert(std::make_pair(
+ surface_id, GpuSurfaceTracker::GetInstance()->GetSurfaceRefForSurface(
+ surface_id)));
+ }
} else {
callback.Run(gfx::GpuMemoryBufferHandle());
}
@@ -753,6 +767,13 @@ void GpuProcessHost::OnGpuMemoryBufferCreated(
create_gpu_memory_buffer_requests_.front();
create_gpu_memory_buffer_requests_.pop();
callback.Run(handle);
+
+ int32 surface_id = create_gpu_memory_buffer_surface_refs_.front();
+ create_gpu_memory_buffer_surface_refs_.pop();
+ SurfaceRefMap::iterator it = surface_refs_.find(surface_id);
+ if (it != surface_refs_.end()) {
+ surface_refs_.erase(it);
+ }
}
void GpuProcessHost::OnDidCreateOffscreenContext(const GURL& url) {