#include "content/public/common/content_switches.h"
#include "gpu/command_buffer/service/context_group.h"
#include "gpu/command_buffer/service/gpu_scheduler.h"
+#include "gpu/command_buffer/service/mailbox_manager.h"
#include "ui/gl/scoped_binders.h"
using gpu::gles2::ContextGroup;
using gpu::gles2::GLES2Decoder;
using gpu::gles2::MailboxManager;
-using gpu::gles2::MailboxName;
using gpu::gles2::Texture;
using gpu::gles2::TextureManager;
using gpu::gles2::TextureRef;
+using gpu::Mailbox;
namespace content {
namespace {
}
void TextureImageTransportSurface::SetLatencyInfo(
- const ui::LatencyInfo& latency_info) {
- latency_info_ = latency_info;
+ const std::vector<ui::LatencyInfo>& latency_info) {
+ for (size_t i = 0; i < latency_info.size(); i++)
+ latency_info_.push_back(latency_info[i]);
+}
+
+void TextureImageTransportSurface::WakeUpGpu() {
+ NOTIMPLEMENTED();
}
bool TextureImageTransportSurface::SwapBuffers() {
GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
params.size = backbuffer_size();
params.scale_factor = scale_factor_;
- params.mailbox_name.assign(
- reinterpret_cast<const char*>(&back_mailbox_name_),
- sizeof(back_mailbox_name_));
+ params.mailbox = back_mailbox_;
glFlush();
- params.latency_info = latency_info_;
+ params.latency_info.swap(latency_info_);
helper_->SendAcceleratedSurfaceBuffersSwapped(params);
DCHECK(!is_swap_buffers_pending_);
params.y = y;
params.width = width;
params.height = height;
- params.mailbox_name.assign(
- reinterpret_cast<const char*>(&back_mailbox_name_),
- sizeof(back_mailbox_name_));
+ params.mailbox = back_mailbox_;
glFlush();
- params.latency_info = latency_info_;
+ params.latency_info.swap(latency_info_);
helper_->SendAcceleratedSurfacePostSubBuffer(params);
DCHECK(!is_swap_buffers_pending_);
std::string TextureImageTransportSurface::GetExtensions() {
std::string extensions = gfx::GLSurface::GetExtensions();
extensions += extensions.empty() ? "" : " ";
- extensions += "GL_CHROMIUM_front_buffer_cached ";
extensions += "GL_CHROMIUM_post_sub_buffer";
return extensions;
}
void TextureImageTransportSurface::OnBufferPresented(
const AcceleratedSurfaceMsg_BufferPresented_Params& params) {
if (params.sync_point == 0) {
- BufferPresentedImpl(params.mailbox_name);
+ BufferPresentedImpl(params.mailbox);
} else {
helper_->manager()->sync_point_manager()->AddSyncPointCallback(
params.sync_point,
base::Bind(&TextureImageTransportSurface::BufferPresentedImpl,
this,
- params.mailbox_name));
+ params.mailbox));
}
}
-void TextureImageTransportSurface::BufferPresentedImpl(
- const std::string& mailbox_name) {
+void TextureImageTransportSurface::BufferPresentedImpl(const Mailbox& mailbox) {
DCHECK(is_swap_buffers_pending_);
is_swap_buffers_pending_ = false;
DCHECK(backbuffer_.get());
bool swap = true;
- if (!mailbox_name.empty()) {
- DCHECK(mailbox_name.length() == GL_MAILBOX_SIZE_CHROMIUM);
- if (!memcmp(mailbox_name.data(),
- &back_mailbox_name_,
- mailbox_name.length())) {
+ if (!mailbox.IsZero()) {
+ if (mailbox == back_mailbox_) {
// The browser has skipped the frame to unblock the GPU process, waiting
// for one of the right size, and returned the back buffer, so don't swap.
swap = false;
}
if (swap) {
std::swap(backbuffer_, frontbuffer_);
- std::swap(back_mailbox_name_, front_mailbox_name_);
+ std::swap(back_mailbox_, front_mailbox_);
}
// We're relying on the fact that the parent context is
void TextureImageTransportSurface::ReleaseBackTexture() {
DCHECK(IsContextValid(helper_.get()));
backbuffer_ = NULL;
- back_mailbox_name_ = MailboxName();
+ back_mailbox_ = Mailbox();
glFlush();
CHECK_GL_ERROR();
}
void TextureImageTransportSurface::ReleaseFrontTexture() {
DCHECK(IsContextValid(helper_.get()));
frontbuffer_ = NULL;
- front_mailbox_name_ = MailboxName();
+ front_mailbox_ = Mailbox();
glFlush();
CHECK_GL_ERROR();
helper_->SendAcceleratedSurfaceRelease();
TextureManager* texture_manager =
decoder->GetContextGroup()->texture_manager();
if (!backbuffer_.get()) {
- mailbox_manager_->GenerateMailboxName(&back_mailbox_name_);
+ back_mailbox_ = gpu::Mailbox::Generate();
GLuint service_id;
glGenTextures(1, &service_id);
backbuffer_ = TextureRef::Create(texture_manager, 0, service_id);
texture_manager->SetTarget(backbuffer_.get(), GL_TEXTURE_2D);
Texture* texture = texture_manager->Produce(backbuffer_.get());
- bool success = mailbox_manager_->ProduceTexture(
- GL_TEXTURE_2D, back_mailbox_name_, texture);
- DCHECK(success);
+ mailbox_manager_->ProduceTexture(GL_TEXTURE_2D, back_mailbox_, texture);
}
{