Index: ppapi/cpp/dev/var_array_buffer_dev.cc |
diff --git a/ppapi/cpp/dev/var_array_buffer_dev.cc b/ppapi/cpp/dev/var_array_buffer_dev.cc |
index 61f697efa2150ff29bc267264eeb48db51eb8d53..e4372413fc4c95920f67c078d5ee7008a4514df8 100644 |
--- a/ppapi/cpp/dev/var_array_buffer_dev.cc |
+++ b/ppapi/cpp/dev/var_array_buffer_dev.cc |
@@ -4,6 +4,8 @@ |
#include "ppapi/cpp/dev/var_array_buffer_dev.h" |
+#include <limits> |
+ |
#include "ppapi/c/dev/ppb_var_array_buffer_dev.h" |
#include "ppapi/cpp/logging.h" |
#include "ppapi/cpp/module_impl.h" |
@@ -18,22 +20,17 @@ template <> const char* interface_name<PPB_VarArrayBuffer_Dev>() { |
} // namespace |
-VarArrayBuffer_Dev::VarArrayBuffer_Dev(const Var& var) |
- : Var(var), buffer_(NULL) { |
- if (var.is_array_buffer()) { |
- buffer_ = Map(); |
- } else { |
+VarArrayBuffer_Dev::VarArrayBuffer_Dev(const Var& var) : Var(var) { |
+ if (!var.is_array_buffer()) { |
PP_NOTREACHED(); |
var_ = PP_MakeNull(); |
} |
} |
-VarArrayBuffer_Dev::VarArrayBuffer_Dev(uint32_t size_in_bytes) |
- : buffer_(NULL) { |
+VarArrayBuffer_Dev::VarArrayBuffer_Dev(uint32_t size_in_bytes) { |
if (has_interface<PPB_VarArrayBuffer_Dev>()) { |
var_ = get_interface<PPB_VarArrayBuffer_Dev>()->Create(size_in_bytes); |
needs_release_ = true; |
- buffer_ = Map(); |
} else { |
PP_NOTREACHED(); |
var_ = PP_MakeNull(); |
@@ -41,27 +38,26 @@ VarArrayBuffer_Dev::VarArrayBuffer_Dev(uint32_t size_in_bytes) |
} |
uint32_t VarArrayBuffer_Dev::ByteLength() const { |
- if (has_interface<PPB_VarArrayBuffer_Dev>()) { |
- return get_interface<PPB_VarArrayBuffer_Dev>()->ByteLength(var_); |
- } |
- PP_NOTREACHED(); |
- return 0; |
-} |
- |
-const void* VarArrayBuffer_Dev::Map() const { |
- return const_cast<VarArrayBuffer_Dev*>(this)->Map(); |
+ uint32_t byte_length = std::numeric_limits<uint32_t>::max(); |
+ if (is_array_buffer() && has_interface<PPB_VarArrayBuffer_Dev>()) |
+ get_interface<PPB_VarArrayBuffer_Dev>()->ByteLength(var_, &byte_length); |
+ else |
+ PP_NOTREACHED(); |
+ return byte_length; |
} |
void* VarArrayBuffer_Dev::Map() { |
- // TODO(dmichael): This is not thread-safe. |
- if (buffer_) |
- return buffer_; |
- if (has_interface<PPB_VarArrayBuffer_Dev>()) { |
- buffer_ = get_interface<PPB_VarArrayBuffer_Dev>()->Map(var_); |
- return buffer_; |
- } |
+ if (is_array_buffer() && has_interface<PPB_VarArrayBuffer_Dev>()) |
+ return get_interface<PPB_VarArrayBuffer_Dev>()->Map(var_); |
PP_NOTREACHED(); |
- return 0; |
+ return NULL; |
+} |
+ |
+void VarArrayBuffer_Dev::Unmap() { |
+ if (is_array_buffer() && has_interface<PPB_VarArrayBuffer_Dev>()) |
+ get_interface<PPB_VarArrayBuffer_Dev>()->Map(var_); |
bbudge
2012/01/25 22:19:07
Shouldn't this call UnMap?
dmichael (off chromium)
2012/01/25 23:50:11
Unmap is only an optimization for apps that want t
|
+ else |
+ PP_NOTREACHED(); |
} |
} // namespace pp |