Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /refs/heads/main /. /gin /array_buffer.h
blob: f8ac17188be65745f4de2c55a189e3ea92eef86b [file] [log] [blame] [edit]
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifdef UNSAFE_BUFFERS_BUILD
// TODO(crbug.com/351564777): Remove this and convert code to safer constructs.
#pragma allow_unsafe_buffers
#endif
#ifndef GIN_ARRAY_BUFFER_H_
#define GIN_ARRAY_BUFFER_H_
#include<stddef.h>
#include<stdint.h>
#include"base/compiler_specific.h"
#include"base/memory/shared_memory_mapper.h"
#include"gin/converter.h"
#include"gin/gin_export.h"
#include"partition_alloc/partition_alloc.h"
#include"v8/include/v8-array-buffer.h"
#include"v8/include/v8-forward.h"
namespace gin{
classArrayBufferAllocator:public v8::ArrayBuffer::Allocator{
public:
void*Allocate(size_t length)override;
void*AllocateUninitialized(size_t length)override;
voidFree(void* data,size_t length)override;
GIN_EXPORTstaticArrayBufferAllocator*SharedInstance();
private:
friendclass V8Initializer;
template<partition_alloc::AllocFlags flags>
void*AllocateInternal(size_t length);
// Initialize the PartitionAlloc partition from which instances of this class
// allocate memory. This is called after initializing V8 since, when enabled,
// the V8 sandbox must be initialized first.
staticvoidInitializePartition();
// The PartitionAlloc partition that instances of this class allocate memory
// chunks from. When the V8 sandbox is enabled, this partition must be placed
// inside of it. For that, PA's ConfigurablePool is created inside the V8
// sandbox during initialization of V8, and this partition is then placed
// inside the configurable pool during InitializePartition().
static partition_alloc::PartitionRoot* partition_;
};
class GIN_EXPORTArrayBuffer{
public:
ArrayBuffer();
ArrayBuffer(v8::Isolate* isolate, v8::Local<v8::ArrayBuffer> buffer);
ArrayBuffer(constArrayBuffer&)=delete;
~ArrayBuffer();
ArrayBuffer&operator=(constArrayBuffer& other);
void* bytes()const{
return backing_store_? backing_store_->Data():nullptr;
}
size_t num_bytes()const{
return backing_store_? backing_store_->ByteLength():0;
}
private:
std::shared_ptr<v8::BackingStore> backing_store_;
};
template<>
struct GIN_EXPORTConverter<ArrayBuffer>{
staticboolFromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
ArrayBuffer*out);
};
class GIN_EXPORTArrayBufferView{
public:
ArrayBufferView();
ArrayBufferView(v8::Isolate* isolate, v8::Local<v8::ArrayBufferView> view);
ArrayBufferView(constArrayBufferView&)=delete;
~ArrayBufferView();
ArrayBufferView&operator=(constArrayBufferView& other);
void* bytes()const{
returnstatic_cast<uint8_t*>(array_buffer_.bytes())+ offset_;
}
size_t num_bytes()const{return num_bytes_;}
private:
ArrayBuffer array_buffer_;
size_t offset_;
size_t num_bytes_;
};
template<>
struct GIN_EXPORTConverter<ArrayBufferView>{
staticboolFromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
ArrayBufferView*out);
};
GIN_EXPORTbase::SharedMemoryMapper*GetSharedMemoryMapperForArrayBuffers();
}// namespace gin
#endif// GIN_ARRAY_BUFFER_H_

[8]ページ先頭

©2009-2025 Movatter.jp