1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
// Copyright 2014 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/child/child_gpu_memory_buffer_manager.h"
#include "content/common/child_process_messages.h"
#include "content/common/gpu/client/gpu_memory_buffer_impl.h"
namespace content {
namespace {
void DeletedGpuMemoryBuffer(ThreadSafeSender* sender,
gfx::GpuMemoryBufferId id,
uint32 sync_point) {
TRACE_EVENT0("renderer",
"ChildGpuMemoryBufferManager::DeletedGpuMemoryBuffer");
sender->Send(new ChildProcessHostMsg_DeletedGpuMemoryBuffer(id, sync_point));
}
} // namespace
ChildGpuMemoryBufferManager::ChildGpuMemoryBufferManager(
ThreadSafeSender* sender)
: sender_(sender) {
}
ChildGpuMemoryBufferManager::~ChildGpuMemoryBufferManager() {
}
scoped_ptr<gfx::GpuMemoryBuffer>
ChildGpuMemoryBufferManager::AllocateGpuMemoryBuffer(
const gfx::Size& size,
gfx::GpuMemoryBuffer::Format format,
gfx::GpuMemoryBuffer::Usage usage) {
TRACE_EVENT2("renderer",
"ChildGpuMemoryBufferManager::AllocateGpuMemoryBuffer",
"width",
size.width(),
"height",
size.height());
gfx::GpuMemoryBufferHandle handle;
IPC::Message* message = new ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer(
size.width(), size.height(), format, usage, &handle);
bool success = sender_->Send(message);
if (!success)
return scoped_ptr<gfx::GpuMemoryBuffer>();
scoped_ptr<GpuMemoryBufferImpl> buffer(GpuMemoryBufferImpl::CreateFromHandle(
handle,
size,
format,
base::Bind(&DeletedGpuMemoryBuffer, sender_, handle.id)));
if (!buffer) {
sender_->Send(new ChildProcessHostMsg_DeletedGpuMemoryBuffer(handle.id, 0));
return scoped_ptr<gfx::GpuMemoryBuffer>();
}
return buffer.Pass();
}
gfx::GpuMemoryBuffer*
ChildGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer(
ClientBuffer buffer) {
return GpuMemoryBufferImpl::FromClientBuffer(buffer);
}
void ChildGpuMemoryBufferManager::SetDestructionSyncPoint(
gfx::GpuMemoryBuffer* buffer,
uint32 sync_point) {
static_cast<GpuMemoryBufferImpl*>(buffer)
->set_destruction_sync_point(sync_point);
}
} // namespace content
|