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

Side by Side Diff: courgette/memory_allocator.cc

Issue 6597038: Implementation of an STL compatible allocator for Courgette on Windows.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 months 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 | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 "courgette/memory_allocator.h"
6
7 #include "base/file_util.h"
8 #include "base/logging.h"
9
10 #ifdef OS_WIN
11
12 namespace courgette {
13
14 // TempFile
15
16 TempFile::TempFile() : file_(base::kInvalidPlatformFileValue), size_(0) {
17 }
18
19 TempFile::~TempFile() {
20 Close();
21 }
22
23 void TempFile::Close() {
24 if (valid()) {
25 base::ClosePlatformFile(file_);
26 file_ = base::kInvalidPlatformFileValue;
27 size_ = 0;
28 }
29 }
30
31 bool TempFile::Create() {
32 DCHECK(file_ == base::kInvalidPlatformFileValue);
33 FilePath path;
34 file_util::CreateTemporaryFile(&path);
grt (UTC plus 2) 2011/02/28 15:06:41 what if this returns false?
tommi (sloooow) - chröme 2011/02/28 17:50:00 Done.
35 bool created = false;
36 base::PlatformFileError error_code = base::PLATFORM_FILE_OK;
37 int flags = base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_READ |
38 base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_DELETE_ON_CLOSE |
39 base::PLATFORM_FILE_TEMPORARY;
40 file_ = base::CreatePlatformFile(path, flags, &created, &error_code);
grt (UTC plus 2) 2011/02/28 15:06:41 PLOG_IF(ERROR, file_ == base::kInvalidPlatformFile
tommi (sloooow) - chröme 2011/02/28 17:50:00 Done.
41 return valid();
42 }
43
44 bool TempFile::valid() const {
45 return file_ != base::kInvalidPlatformFileValue;
46 }
47
48 base::PlatformFile TempFile::handle() const {
49 return file_;
50 }
51
52 size_t TempFile::size() const {
53 return size_;
54 }
55
56 bool TempFile::SetSize(size_t size) {
57 bool ret = base::TruncatePlatformFile(file_, size);
58 if (ret)
59 size_ = size;
60 return ret;
61 }
62
63 // FileMapping
64
65 FileMapping::FileMapping() : mapping_(NULL), view_(NULL) {
66 }
67
68 FileMapping::~FileMapping() {
69 Close();
70 }
71
72 bool FileMapping::Create(HANDLE file, size_t size) {
73 DCHECK(file != INVALID_HANDLE_VALUE);
74 DCHECK(!valid());
75 mapping_ = ::CreateFileMapping(file, NULL, PAGE_READWRITE, 0, 0, NULL);
76 if (mapping_)
77 view_ = ::MapViewOfFile(mapping_, FILE_MAP_WRITE, 0, 0, size);
78
79 if (!valid()) {
80 PLOG(ERROR) << "Failed to map file";
81 Close();
82 } else {
83 char* write = reinterpret_cast<char*>(view_);
84 write[0] = 0;
85 write[size - 1] = 0;
86 }
87
88 return valid();
89 }
90
91 void FileMapping::Close() {
92 if (view_)
93 ::UnmapViewOfFile(view_);
94 if (mapping_)
95 ::CloseHandle(mapping_);
96 mapping_ = NULL;
97 view_ = NULL;
98 }
99
100 bool FileMapping::valid() const {
101 return view_ != NULL;
102 }
103
104 void* FileMapping::view() const {
105 return view_;
106 }
107
108 // TempMapping
109
110 TempMapping::TempMapping() {
111 }
112
113 TempMapping::~TempMapping() {
114 }
115
116 bool TempMapping::Initialize(size_t size) {
117 size += sizeof(TempMapping*); // NOLINT
grt (UTC plus 2) 2011/02/28 15:06:41 Style guide says "Use sizeof(varname) instead of s
tommi (sloooow) - chröme 2011/02/28 17:50:00 Done.
118 bool ret = file_.Create() && file_.SetSize(size) &&
119 mapping_.Create(file_.handle(), size);
120 if (ret) {
121 TempMapping** write = reinterpret_cast<TempMapping**>(mapping_.view());
122 *write = this;
123 }
124
125 return ret;
126 }
127
128 void* TempMapping::memory() const {
129 uint8* mem = reinterpret_cast<uint8*>(mapping_.view());
130 if (mem)
131 mem += sizeof(TempMapping*); // NOLINT
grt (UTC plus 2) 2011/02/28 15:06:41 sizeof(this)?
tommi (sloooow) - chröme 2011/02/28 17:50:00 Done.
132 DCHECK(mem);
133 return mem;
134 }
135
136 // static
137 TempMapping* TempMapping::GetMappingFromPtr(void* mem) {
138 TempMapping* ret = NULL;
139 if (mem) {
140 ret = reinterpret_cast<TempMapping**>(mem)[-1];
141 }
142 DCHECK(ret);
143 return ret;
144 }
145
146 } // namespace courgette
147
148 #endif // OS_WIN
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698