Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(432)

Side by Side Diff: mojo/services/media/common/cpp/mapped_shared_buffer.cc

Issue 1460693004: Add helper classes to for managing shared buffers. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: fix .gitignore Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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 <cassert>
johngro 2015/12/05 00:45:55 same comment as in the previous file, MOJO_DCHECK
dalesat 2015/12/07 18:30:20 Done.
6
7 #include "mojo/services/media/common/cpp/mapped_shared_buffer.h"
8
9 namespace mojo {
10 namespace media {
11
12 MappedSharedBuffer::MappedSharedBuffer() {}
13
14 MappedSharedBuffer::~MappedSharedBuffer() {}
15
16 void MappedSharedBuffer::InitNew(uint64_t size) {
17 assert(size > 0);
18
19 buffer_.reset(new SharedBuffer(size));
20 handle_.reset();
21
22 InitInternal(buffer_->handle, size);
23 }
24
25 void MappedSharedBuffer::InitFromHandle(
26 ScopedSharedBufferHandle handle,
27 uint64_t size) {
28 assert(handle.is_valid());
29 assert(size > 0);
30
31 buffer_.reset();
32 handle_ = handle.Pass();
33
34 InitInternal(handle_, size);
35 }
36
37 void MappedSharedBuffer::InitInternal(
38 ScopedSharedBufferHandle& handle,
39 uint64_t size) {
40 assert(handle.is_valid());
41 assert(size > 0);
42
43 size_ = size;
44 buffer_ptr_.reset();
45
46 void* ptr;
47 auto result = MapBuffer(
48 handle.get(),
49 0, // offset
50 size,
51 &ptr,
52 MOJO_MAP_BUFFER_FLAG_NONE);
53 assert(result == MOJO_RESULT_OK);
54 assert(ptr);
55
56 buffer_ptr_.reset(reinterpret_cast<uint8_t*>(ptr));
57
58 OnInit();
59 }
60
61 bool MappedSharedBuffer::initialized() {
62 return buffer_ptr_ != nullptr;
63 }
64
65 uint64_t MappedSharedBuffer::size() {
66 return size_;
67 }
68
69 ScopedSharedBufferHandle MappedSharedBuffer::GetDuplicateHandle() {
70 assert(initialized());
71 ScopedSharedBufferHandle handle;
72 // TODO: We should create a read-only duplicate of the handle.
johngro 2015/12/05 00:45:55 TODO(dalesat)
dalesat 2015/12/07 18:30:20 Removed. Also added a check so this works when Ini
73 DuplicateBuffer(buffer_->handle.get(), nullptr, &handle);
74 return handle.Pass();
75 }
76
77 void* MappedSharedBuffer::PtrFromOffset(uint64_t offset) {
78 assert(buffer_ptr_);
79
80 if (offset == FifoAllocator::kNullOffset) {
81 return nullptr;
82 }
83
84 assert(offset < size_);
85 return buffer_ptr_.get() + offset;
86 }
87
88 uint64_t MappedSharedBuffer::OffsetFromPtr(void *ptr) {
89 assert(buffer_ptr_);
90 if (ptr == nullptr) {
91 return FifoAllocator::kNullOffset;
92 }
93 uint64_t offset = reinterpret_cast<uint8_t*>(ptr) - buffer_ptr_.get();
94 assert(offset < size_);
95 return offset;
96 }
97
98 void MappedSharedBuffer::OnInit() {}
99
100 } // namespace media
101 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698