17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file.
47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "webkit/renderer/compositor_bindings/web_external_bitmap_impl.h"
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/shared_memory.h"
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace webkit {
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace {
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochSharedMemoryAllocationFunction g_memory_allocator;
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SetSharedMemoryAllocationFunction(
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    SharedMemoryAllocationFunction allocator) {
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  g_memory_allocator = allocator;
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochWebExternalBitmapImpl::WebExternalBitmapImpl() {}
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochWebExternalBitmapImpl::~WebExternalBitmapImpl() {}
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid WebExternalBitmapImpl::setSize(WebKit::WebSize size) {
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (size != size_) {
28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    size_t byte_size = size.width * size.height * 4;
29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    shared_memory_ = g_memory_allocator(byte_size);
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    if (shared_memory_)
31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      shared_memory_->Map(byte_size);
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    size_ = size;
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochWebKit::WebSize WebExternalBitmapImpl::size() {
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return size_;
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochuint8* WebExternalBitmapImpl::pixels() {
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return static_cast<uint8*>(shared_memory_->memory());
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace webkit
45