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

Side by Side Diff: net/disk_cache/entry_impl.cc

Issue 146129: Disk Cache: Split some time histograms in groups based... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 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
« no previous file with comments | « net/disk_cache/entry_impl.h ('k') | net/disk_cache/eviction.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/disk_cache/entry_impl.h" 5 #include "net/disk_cache/entry_impl.h"
6 6
7 #include "base/histogram.h" 7 #include "base/histogram.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "net/base/io_buffer.h" 10 #include "net/base/io_buffer.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 74
75 } // namespace 75 } // namespace
76 76
77 namespace disk_cache { 77 namespace disk_cache {
78 78
79 EntryImpl::EntryImpl(BackendImpl* backend, Addr address) 79 EntryImpl::EntryImpl(BackendImpl* backend, Addr address)
80 : entry_(NULL, Addr(0)), node_(NULL, Addr(0)) { 80 : entry_(NULL, Addr(0)), node_(NULL, Addr(0)) {
81 entry_.LazyInit(backend->File(address), address); 81 entry_.LazyInit(backend->File(address), address);
82 doomed_ = false; 82 doomed_ = false;
83 backend_ = backend; 83 backend_ = backend;
84 for (int i = 0; i < NUM_STREAMS; i++) { 84 for (int i = 0; i < kNumStreams; i++) {
85 unreported_size_[i] = 0; 85 unreported_size_[i] = 0;
86 } 86 }
87 } 87 }
88 88
89 // When an entry is deleted from the cache, we clean up all the data associated 89 // When an entry is deleted from the cache, we clean up all the data associated
90 // with it for two reasons: to simplify the reuse of the block (we know that any 90 // with it for two reasons: to simplify the reuse of the block (we know that any
91 // unused block is filled with zeros), and to simplify the handling of write / 91 // unused block is filled with zeros), and to simplify the handling of write /
92 // read partial information from an entry (don't have to worry about returning 92 // read partial information from an entry (don't have to worry about returning
93 // data related to a previous cache entry because the range was not fully 93 // data related to a previous cache entry because the range was not fully
94 // written before). 94 // written before).
95 EntryImpl::~EntryImpl() { 95 EntryImpl::~EntryImpl() {
96 // Save the sparse info to disk before deleting this entry. 96 // Save the sparse info to disk before deleting this entry.
97 sparse_.reset(); 97 sparse_.reset();
98 98
99 if (doomed_) { 99 if (doomed_) {
100 DeleteEntryData(true); 100 DeleteEntryData(true);
101 } else { 101 } else {
102 bool ret = true; 102 bool ret = true;
103 for (int index = 0; index < NUM_STREAMS; index++) { 103 for (int index = 0; index < kNumStreams; index++) {
104 if (user_buffers_[index].get()) { 104 if (user_buffers_[index].get()) {
105 if (!(ret = Flush(index, entry_.Data()->data_size[index], false))) 105 if (!(ret = Flush(index, entry_.Data()->data_size[index], false)))
106 LOG(ERROR) << "Failed to save user data"; 106 LOG(ERROR) << "Failed to save user data";
107 } else if (unreported_size_[index]) { 107 } else if (unreported_size_[index]) {
108 backend_->ModifyStorageSize( 108 backend_->ModifyStorageSize(
109 entry_.Data()->data_size[index] - unreported_size_[index], 109 entry_.Data()->data_size[index] - unreported_size_[index],
110 entry_.Data()->data_size[index]); 110 entry_.Data()->data_size[index]);
111 } 111 }
112 } 112 }
113 if (node_.HasData() && this == node_.Data()->pointer) { 113 if (node_.HasData() && this == node_.Data()->pointer) {
(...skipping 27 matching lines...) Expand all
141 141
142 void EntryImpl::Close() { 142 void EntryImpl::Close() {
143 Release(); 143 Release();
144 } 144 }
145 145
146 std::string EntryImpl::GetKey() const { 146 std::string EntryImpl::GetKey() const {
147 CacheEntryBlock* entry = const_cast<CacheEntryBlock*>(&entry_); 147 CacheEntryBlock* entry = const_cast<CacheEntryBlock*>(&entry_);
148 if (entry->Data()->key_len > kMaxInternalKeyLength) { 148 if (entry->Data()->key_len > kMaxInternalKeyLength) {
149 Addr address(entry->Data()->long_key); 149 Addr address(entry->Data()->long_key);
150 DCHECK(address.is_initialized()); 150 DCHECK(address.is_initialized());
151 COMPILE_ASSERT(NUM_STREAMS == kKeyFileIndex, invalid_key_index); 151 COMPILE_ASSERT(kNumStreams == kKeyFileIndex, invalid_key_index);
152 File* file = const_cast<EntryImpl*>(this)->GetBackingFile(address, 152 File* file = const_cast<EntryImpl*>(this)->GetBackingFile(address,
153 kKeyFileIndex); 153 kKeyFileIndex);
154 154
155 size_t offset = 0; 155 size_t offset = 0;
156 if (address.is_block_file()) 156 if (address.is_block_file())
157 offset = address.start_block() * address.BlockSize() + kBlockHeaderSize; 157 offset = address.start_block() * address.BlockSize() + kBlockHeaderSize;
158 158
159 std::string key; 159 std::string key;
160 if (!file || !file->Read(WriteInto(&key, entry->Data()->key_len + 1), 160 if (!file || !file->Read(WriteInto(&key, entry->Data()->key_len + 1),
161 entry->Data()->key_len + 1, offset)) 161 entry->Data()->key_len + 1, offset))
162 key.clear(); 162 key.clear();
163 return key; 163 return key;
164 } else { 164 } else {
165 return std::string(entry->Data()->key); 165 return std::string(entry->Data()->key);
166 } 166 }
167 } 167 }
168 168
169 Time EntryImpl::GetLastUsed() const { 169 Time EntryImpl::GetLastUsed() const {
170 CacheRankingsBlock* node = const_cast<CacheRankingsBlock*>(&node_); 170 CacheRankingsBlock* node = const_cast<CacheRankingsBlock*>(&node_);
171 return Time::FromInternalValue(node->Data()->last_used); 171 return Time::FromInternalValue(node->Data()->last_used);
172 } 172 }
173 173
174 Time EntryImpl::GetLastModified() const { 174 Time EntryImpl::GetLastModified() const {
175 CacheRankingsBlock* node = const_cast<CacheRankingsBlock*>(&node_); 175 CacheRankingsBlock* node = const_cast<CacheRankingsBlock*>(&node_);
176 return Time::FromInternalValue(node->Data()->last_modified); 176 return Time::FromInternalValue(node->Data()->last_modified);
177 } 177 }
178 178
179 int32 EntryImpl::GetDataSize(int index) const { 179 int32 EntryImpl::GetDataSize(int index) const {
180 if (index < 0 || index >= NUM_STREAMS) 180 if (index < 0 || index >= kNumStreams)
181 return 0; 181 return 0;
182 182
183 CacheEntryBlock* entry = const_cast<CacheEntryBlock*>(&entry_); 183 CacheEntryBlock* entry = const_cast<CacheEntryBlock*>(&entry_);
184 return entry->Data()->data_size[index]; 184 return entry->Data()->data_size[index];
185 } 185 }
186 186
187 int EntryImpl::ReadData(int index, int offset, net::IOBuffer* buf, int buf_len, 187 int EntryImpl::ReadData(int index, int offset, net::IOBuffer* buf, int buf_len,
188 net::CompletionCallback* completion_callback) { 188 net::CompletionCallback* completion_callback) {
189 DCHECK(node_.Data()->dirty); 189 DCHECK(node_.Data()->dirty);
190 if (index < 0 || index >= NUM_STREAMS) 190 if (index < 0 || index >= kNumStreams)
191 return net::ERR_INVALID_ARGUMENT; 191 return net::ERR_INVALID_ARGUMENT;
192 192
193 int entry_size = entry_.Data()->data_size[index]; 193 int entry_size = entry_.Data()->data_size[index];
194 if (offset >= entry_size || offset < 0 || !buf_len) 194 if (offset >= entry_size || offset < 0 || !buf_len)
195 return 0; 195 return 0;
196 196
197 if (buf_len < 0) 197 if (buf_len < 0)
198 return net::ERR_INVALID_ARGUMENT; 198 return net::ERR_INVALID_ARGUMENT;
199 199
200 Time start = Time::Now(); 200 Time start = Time::Now();
201 static Histogram stats("DiskCache.ReadTime", TimeDelta::FromMilliseconds(1),
202 TimeDelta::FromSeconds(10), 50);
203 stats.SetFlags(kUmaTargetedHistogramFlag);
204 201
205 if (offset + buf_len > entry_size) 202 if (offset + buf_len > entry_size)
206 buf_len = entry_size - offset; 203 buf_len = entry_size - offset;
207 204
208 UpdateRank(false); 205 UpdateRank(false);
209 206
210 backend_->OnEvent(Stats::READ_DATA); 207 backend_->OnEvent(Stats::READ_DATA);
211 208
212 if (user_buffers_[index].get()) { 209 if (user_buffers_[index].get()) {
213 // Complete the operation locally. 210 // Complete the operation locally.
214 DCHECK(kMaxBlockSize >= offset + buf_len); 211 DCHECK(kMaxBlockSize >= offset + buf_len);
215 memcpy(buf->data() , user_buffers_[index].get() + offset, buf_len); 212 memcpy(buf->data() , user_buffers_[index].get() + offset, buf_len);
216 if (backend_->cache_type() == net::DISK_CACHE) 213 ReportIOTime(kRead, start);
217 stats.AddTime(Time::Now() - start);
218 return buf_len; 214 return buf_len;
219 } 215 }
220 216
221 Addr address(entry_.Data()->data_addr[index]); 217 Addr address(entry_.Data()->data_addr[index]);
222 DCHECK(address.is_initialized()); 218 DCHECK(address.is_initialized());
223 if (!address.is_initialized()) 219 if (!address.is_initialized())
224 return net::ERR_FAILED; 220 return net::ERR_FAILED;
225 221
226 File* file = GetBackingFile(address, index); 222 File* file = GetBackingFile(address, index);
227 if (!file) 223 if (!file)
(...skipping 11 matching lines...) Expand all
239 bool completed; 235 bool completed;
240 if (!file->Read(buf->data(), buf_len, file_offset, io_callback, &completed)) { 236 if (!file->Read(buf->data(), buf_len, file_offset, io_callback, &completed)) {
241 if (io_callback) 237 if (io_callback)
242 io_callback->Discard(); 238 io_callback->Discard();
243 return net::ERR_FAILED; 239 return net::ERR_FAILED;
244 } 240 }
245 241
246 if (io_callback && completed) 242 if (io_callback && completed)
247 io_callback->Discard(); 243 io_callback->Discard();
248 244
249 if (backend_->cache_type() == net::DISK_CACHE) 245 ReportIOTime(kRead, start);
250 stats.AddTime(Time::Now() - start);
251 return (completed || !completion_callback) ? buf_len : net::ERR_IO_PENDING; 246 return (completed || !completion_callback) ? buf_len : net::ERR_IO_PENDING;
252 } 247 }
253 248
254 int EntryImpl::WriteData(int index, int offset, net::IOBuffer* buf, int buf_len, 249 int EntryImpl::WriteData(int index, int offset, net::IOBuffer* buf, int buf_len,
255 net::CompletionCallback* completion_callback, 250 net::CompletionCallback* completion_callback,
256 bool truncate) { 251 bool truncate) {
257 DCHECK(node_.Data()->dirty); 252 DCHECK(node_.Data()->dirty);
258 if (index < 0 || index >= NUM_STREAMS) 253 if (index < 0 || index >= kNumStreams)
259 return net::ERR_INVALID_ARGUMENT; 254 return net::ERR_INVALID_ARGUMENT;
260 255
261 if (offset < 0 || buf_len < 0) 256 if (offset < 0 || buf_len < 0)
262 return net::ERR_INVALID_ARGUMENT; 257 return net::ERR_INVALID_ARGUMENT;
263 258
264 int max_file_size = backend_->MaxFileSize(); 259 int max_file_size = backend_->MaxFileSize();
265 260
266 // offset of buf_len could be negative numbers. 261 // offset of buf_len could be negative numbers.
267 if (offset > max_file_size || buf_len > max_file_size || 262 if (offset > max_file_size || buf_len > max_file_size ||
268 offset + buf_len > max_file_size) { 263 offset + buf_len > max_file_size) {
269 int size = offset + buf_len; 264 int size = offset + buf_len;
270 if (size <= max_file_size) 265 if (size <= max_file_size)
271 size = kint32max; 266 size = kint32max;
272 backend_->TooMuchStorageRequested(size); 267 backend_->TooMuchStorageRequested(size);
273 return net::ERR_FAILED; 268 return net::ERR_FAILED;
274 } 269 }
275 270
276 Time start = Time::Now(); 271 Time start = Time::Now();
277 static Histogram stats("DiskCache.WriteTime", TimeDelta::FromMilliseconds(1),
278 TimeDelta::FromSeconds(10), 50);
279 stats.SetFlags(kUmaTargetedHistogramFlag);
280 272
281 // Read the size at this point (it may change inside prepare). 273 // Read the size at this point (it may change inside prepare).
282 int entry_size = entry_.Data()->data_size[index]; 274 int entry_size = entry_.Data()->data_size[index];
283 if (!PrepareTarget(index, offset, buf_len, truncate)) 275 if (!PrepareTarget(index, offset, buf_len, truncate))
284 return net::ERR_FAILED; 276 return net::ERR_FAILED;
285 277
286 if (entry_size < offset + buf_len) { 278 if (entry_size < offset + buf_len) {
287 unreported_size_[index] += offset + buf_len - entry_size; 279 unreported_size_[index] += offset + buf_len - entry_size;
288 entry_.Data()->data_size[index] = offset + buf_len; 280 entry_.Data()->data_size[index] = offset + buf_len;
289 entry_.set_modified(); 281 entry_.set_modified();
(...skipping 17 matching lines...) Expand all
307 299
308 backend_->OnEvent(Stats::WRITE_DATA); 300 backend_->OnEvent(Stats::WRITE_DATA);
309 301
310 if (user_buffers_[index].get()) { 302 if (user_buffers_[index].get()) {
311 // Complete the operation locally. 303 // Complete the operation locally.
312 if (!buf_len) 304 if (!buf_len)
313 return 0; 305 return 0;
314 306
315 DCHECK(kMaxBlockSize >= offset + buf_len); 307 DCHECK(kMaxBlockSize >= offset + buf_len);
316 memcpy(user_buffers_[index].get() + offset, buf->data(), buf_len); 308 memcpy(user_buffers_[index].get() + offset, buf->data(), buf_len);
317 if (backend_->cache_type() == net::DISK_CACHE) 309 ReportIOTime(kWrite, start);
318 stats.AddTime(Time::Now() - start);
319 return buf_len; 310 return buf_len;
320 } 311 }
321 312
322 Addr address(entry_.Data()->data_addr[index]); 313 Addr address(entry_.Data()->data_addr[index]);
323 File* file = GetBackingFile(address, index); 314 File* file = GetBackingFile(address, index);
324 if (!file) 315 if (!file)
325 return net::ERR_FAILED; 316 return net::ERR_FAILED;
326 317
327 size_t file_offset = offset; 318 size_t file_offset = offset;
328 if (address.is_block_file()) { 319 if (address.is_block_file()) {
(...skipping 15 matching lines...) Expand all
344 if (!file->Write(buf->data(), buf_len, file_offset, io_callback, 335 if (!file->Write(buf->data(), buf_len, file_offset, io_callback,
345 &completed)) { 336 &completed)) {
346 if (io_callback) 337 if (io_callback)
347 io_callback->Discard(); 338 io_callback->Discard();
348 return net::ERR_FAILED; 339 return net::ERR_FAILED;
349 } 340 }
350 341
351 if (io_callback && completed) 342 if (io_callback && completed)
352 io_callback->Discard(); 343 io_callback->Discard();
353 344
354 if (backend_->cache_type() == net::DISK_CACHE) 345 ReportIOTime(kWrite, start);
355 stats.AddTime(Time::Now() - start);
356 return (completed || !completion_callback) ? buf_len : net::ERR_IO_PENDING; 346 return (completed || !completion_callback) ? buf_len : net::ERR_IO_PENDING;
357 } 347 }
358 348
359 int EntryImpl::ReadSparseData(int64 offset, net::IOBuffer* buf, int buf_len, 349 int EntryImpl::ReadSparseData(int64 offset, net::IOBuffer* buf, int buf_len,
360 net::CompletionCallback* completion_callback) { 350 net::CompletionCallback* completion_callback) {
361 DCHECK(node_.Data()->dirty); 351 DCHECK(node_.Data()->dirty);
362 int result = InitSparseData(); 352 int result = InitSparseData();
363 if (net::OK != result) 353 if (net::OK != result)
364 return result; 354 return result;
365 355
366 return sparse_->StartIO(SparseControl::kReadOperation, offset, buf, buf_len, 356 Time start = Time::Now();
367 completion_callback); 357 result = sparse_->StartIO(SparseControl::kReadOperation, offset, buf, buf_len,
358 completion_callback);
359 ReportIOTime(kSparseRead, start);
360 return result;
368 } 361 }
369 362
370 int EntryImpl::WriteSparseData(int64 offset, net::IOBuffer* buf, int buf_len, 363 int EntryImpl::WriteSparseData(int64 offset, net::IOBuffer* buf, int buf_len,
371 net::CompletionCallback* completion_callback) { 364 net::CompletionCallback* completion_callback) {
372 DCHECK(node_.Data()->dirty); 365 DCHECK(node_.Data()->dirty);
373 int result = InitSparseData(); 366 int result = InitSparseData();
374 if (net::OK != result) 367 if (net::OK != result)
375 return result; 368 return result;
376 369
377 return sparse_->StartIO(SparseControl::kWriteOperation, offset, buf, buf_len, 370 Time start = Time::Now();
378 completion_callback); 371 result = sparse_->StartIO(SparseControl::kWriteOperation, offset, buf,
372 buf_len, completion_callback);
373 ReportIOTime(kSparseWrite, start);
374 return result;
379 } 375 }
380 376
381 int EntryImpl::GetAvailableRange(int64 offset, int len, int64* start) { 377 int EntryImpl::GetAvailableRange(int64 offset, int len, int64* start) {
382 int result = InitSparseData(); 378 int result = InitSparseData();
383 if (net::OK != result) 379 if (net::OK != result)
384 return result; 380 return result;
385 381
386 return sparse_->GetAvailableRange(offset, len, start); 382 return sparse_->GetAvailableRange(offset, len, start);
387 } 383 }
388 384
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 doomed_ = true; 450 doomed_ = true;
455 } 451 }
456 452
457 void EntryImpl::DeleteEntryData(bool everything) { 453 void EntryImpl::DeleteEntryData(bool everything) {
458 DCHECK(doomed_ || !everything); 454 DCHECK(doomed_ || !everything);
459 455
460 if (GetDataSize(0)) 456 if (GetDataSize(0))
461 CACHE_UMA(COUNTS, "DeleteHeader", 0, GetDataSize(0)); 457 CACHE_UMA(COUNTS, "DeleteHeader", 0, GetDataSize(0));
462 if (GetDataSize(1)) 458 if (GetDataSize(1))
463 CACHE_UMA(COUNTS, "DeleteData", 0, GetDataSize(1)); 459 CACHE_UMA(COUNTS, "DeleteData", 0, GetDataSize(1));
464 for (int index = 0; index < NUM_STREAMS; index++) { 460 for (int index = 0; index < kNumStreams; index++) {
465 Addr address(entry_.Data()->data_addr[index]); 461 Addr address(entry_.Data()->data_addr[index]);
466 if (address.is_initialized()) { 462 if (address.is_initialized()) {
467 DeleteData(address, index); 463 DeleteData(address, index);
468 backend_->ModifyStorageSize(entry_.Data()->data_size[index] - 464 backend_->ModifyStorageSize(entry_.Data()->data_size[index] -
469 unreported_size_[index], 0); 465 unreported_size_[index], 0);
470 entry_.Data()->data_addr[index] = 0; 466 entry_.Data()->data_addr[index] = 0;
471 entry_.Data()->data_size[index] = 0; 467 entry_.Data()->data_size[index] = 0;
472 } 468 }
473 } 469 }
474 470
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 backend_->DecrementIoCount(); 574 backend_->DecrementIoCount();
579 } 575 }
580 576
581 void EntryImpl::SetTimes(base::Time last_used, base::Time last_modified) { 577 void EntryImpl::SetTimes(base::Time last_used, base::Time last_modified) {
582 node_.Data()->last_used = last_used.ToInternalValue(); 578 node_.Data()->last_used = last_used.ToInternalValue();
583 node_.Data()->last_modified = last_modified.ToInternalValue(); 579 node_.Data()->last_modified = last_modified.ToInternalValue();
584 node_.set_modified(); 580 node_.set_modified();
585 } 581 }
586 582
587 bool EntryImpl::CreateDataBlock(int index, int size) { 583 bool EntryImpl::CreateDataBlock(int index, int size) {
588 DCHECK(index >= 0 && index < NUM_STREAMS); 584 DCHECK(index >= 0 && index < kNumStreams);
589 585
590 Addr address(entry_.Data()->data_addr[index]); 586 Addr address(entry_.Data()->data_addr[index]);
591 if (!CreateBlock(size, &address)) 587 if (!CreateBlock(size, &address))
592 return false; 588 return false;
593 589
594 entry_.Data()->data_addr[index] = address.value(); 590 entry_.Data()->data_addr[index] = address.value();
595 entry_.Store(); 591 entry_.Store();
596 return true; 592 return true;
597 } 593 }
598 594
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 if (sparse_.get()) 834 if (sparse_.get())
839 return net::OK; 835 return net::OK;
840 836
841 sparse_.reset(new SparseControl(this)); 837 sparse_.reset(new SparseControl(this));
842 int result = sparse_->Init(); 838 int result = sparse_->Init();
843 if (net::OK != result) 839 if (net::OK != result)
844 sparse_.reset(); 840 sparse_.reset();
845 return result; 841 return result;
846 } 842 }
847 843
844 void EntryImpl::ReportIOTime(Operation op, const base::Time& start) {
845 int group = backend_->GetSizeGroup();
846 switch (op) {
847 case kRead:
848 CACHE_UMA(AGE_MS, "ReadTime", group, start);
849 break;
850 case kWrite:
851 CACHE_UMA(AGE_MS, "WriteTime", group, start);
852 break;
853 case kSparseRead:
854 CACHE_UMA(AGE_MS, "SparseReadTime", 0, start);
855 break;
856 case kSparseWrite:
857 CACHE_UMA(AGE_MS, "SparseWriteTime", 0, start);
858 break;
859 default:
860 NOTREACHED();
861 }
862 }
863
848 void EntryImpl::Log(const char* msg) { 864 void EntryImpl::Log(const char* msg) {
849 void* pointer = NULL; 865 void* pointer = NULL;
850 int dirty = 0; 866 int dirty = 0;
851 if (node_.HasData()) { 867 if (node_.HasData()) {
852 pointer = node_.Data()->pointer; 868 pointer = node_.Data()->pointer;
853 dirty = node_.Data()->dirty; 869 dirty = node_.Data()->dirty;
854 } 870 }
855 871
856 Trace("%s 0x%p 0x%x 0x%x", msg, reinterpret_cast<void*>(this), 872 Trace("%s 0x%p 0x%x 0x%x", msg, reinterpret_cast<void*>(this),
857 entry_.address().value(), node_.address().value()); 873 entry_.address().value(), node_.address().value());
858 874
859 Trace(" data: 0x%x 0x%x 0x%x", entry_.Data()->data_addr[0], 875 Trace(" data: 0x%x 0x%x 0x%x", entry_.Data()->data_addr[0],
860 entry_.Data()->data_addr[1], entry_.Data()->long_key); 876 entry_.Data()->data_addr[1], entry_.Data()->long_key);
861 877
862 Trace(" doomed: %d 0x%p 0x%x", doomed_, pointer, dirty); 878 Trace(" doomed: %d 0x%p 0x%x", doomed_, pointer, dirty);
863 } 879 }
864 880
865 } // namespace disk_cache 881 } // namespace disk_cache
OLDNEW
« no previous file with comments | « net/disk_cache/entry_impl.h ('k') | net/disk_cache/eviction.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698