1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "gpu/command_buffer/common/buffer.h"
6
7#include "base/logging.h"
8
9#include "base/numerics/safe_math.h"
10
11namespace gpu {
12SharedMemoryBufferBacking::SharedMemoryBufferBacking(
13    scoped_ptr<base::SharedMemory> shared_memory,
14    size_t size)
15    : shared_memory_(shared_memory.Pass()), size_(size) {}
16
17SharedMemoryBufferBacking::~SharedMemoryBufferBacking() {}
18
19void* SharedMemoryBufferBacking::GetMemory() const {
20  return shared_memory_->memory();
21}
22
23size_t SharedMemoryBufferBacking::GetSize() const { return size_; }
24
25Buffer::Buffer(scoped_ptr<BufferBacking> backing)
26    : backing_(backing.Pass()),
27      memory_(backing_->GetMemory()),
28      size_(backing_->GetSize()) {
29  DCHECK(memory_) << "The memory must be mapped to create a Buffer";
30}
31
32Buffer::~Buffer() {}
33
34void* Buffer::GetDataAddress(uint32 data_offset, uint32 data_size) const {
35  base::CheckedNumeric<uint32> end = data_offset;
36  end += data_size;
37  if (!end.IsValid() || end.ValueOrDie() > static_cast<uint32>(size_))
38    return NULL;
39  return static_cast<uint8*>(memory_) + data_offset;
40}
41
42} // namespace gpu
43