OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/simple/simple_entry_impl.h" | 5 #include "net/disk_cache/simple/simple_entry_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cstring> | 8 #include <cstring> |
9 #include <limits> | 9 #include <limits> |
10 #include <utility> | 10 #include <utility> |
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
782 } else { | 782 } else { |
783 crc32s_to_write->push_back(CRCRecord(i, false, 0)); | 783 crc32s_to_write->push_back(CRCRecord(i, false, 0)); |
784 } | 784 } |
785 } | 785 } |
786 } | 786 } |
787 } else { | 787 } else { |
788 DCHECK(STATE_UNINITIALIZED == state_ || STATE_FAILURE == state_); | 788 DCHECK(STATE_UNINITIALIZED == state_ || STATE_FAILURE == state_); |
789 } | 789 } |
790 | 790 |
791 if (synchronous_entry_) { | 791 if (synchronous_entry_) { |
792 Closure task = | 792 Closure task = base::Bind( |
793 base::Bind(&SimpleSynchronousEntry::Close, | 793 &SimpleSynchronousEntry::Close, base::Unretained(synchronous_entry_), |
794 base::Unretained(synchronous_entry_), | 794 SimpleEntryStat(last_used_, last_modified_, data_size_, |
795 SimpleEntryStat(last_used_, last_modified_, data_size_, | 795 sparse_data_size_), |
796 sparse_data_size_), | 796 base::Passed(&crc32s_to_write), base::RetainedRef(stream_0_data_)); |
797 base::Passed(&crc32s_to_write), | |
798 stream_0_data_); | |
799 Closure reply = base::Bind(&SimpleEntryImpl::CloseOperationComplete, this); | 797 Closure reply = base::Bind(&SimpleEntryImpl::CloseOperationComplete, this); |
800 synchronous_entry_ = NULL; | 798 synchronous_entry_ = NULL; |
801 worker_pool_->PostTaskAndReply(FROM_HERE, task, reply); | 799 worker_pool_->PostTaskAndReply(FROM_HERE, task, reply); |
802 | 800 |
803 for (int i = 0; i < kSimpleEntryStreamCount; ++i) { | 801 for (int i = 0; i < kSimpleEntryStreamCount; ++i) { |
804 if (!have_written_[i]) { | 802 if (!have_written_[i]) { |
805 SIMPLE_CACHE_UMA(ENUMERATION, | 803 SIMPLE_CACHE_UMA(ENUMERATION, |
806 "CheckCRCResult", cache_type_, | 804 "CheckCRCResult", cache_type_, |
807 crc_check_state_[i], CRC_CHECK_MAX); | 805 crc_check_state_[i], CRC_CHECK_MAX); |
808 } | 806 } |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
869 state_ = STATE_IO_PENDING; | 867 state_ = STATE_IO_PENDING; |
870 if (!doomed_ && backend_.get()) | 868 if (!doomed_ && backend_.get()) |
871 backend_->index()->UseIfExists(entry_hash_); | 869 backend_->index()->UseIfExists(entry_hash_); |
872 | 870 |
873 scoped_ptr<uint32_t> read_crc32(new uint32_t()); | 871 scoped_ptr<uint32_t> read_crc32(new uint32_t()); |
874 scoped_ptr<int> result(new int()); | 872 scoped_ptr<int> result(new int()); |
875 scoped_ptr<SimpleEntryStat> entry_stat( | 873 scoped_ptr<SimpleEntryStat> entry_stat( |
876 new SimpleEntryStat(last_used_, last_modified_, data_size_, | 874 new SimpleEntryStat(last_used_, last_modified_, data_size_, |
877 sparse_data_size_)); | 875 sparse_data_size_)); |
878 Closure task = base::Bind( | 876 Closure task = base::Bind( |
879 &SimpleSynchronousEntry::ReadData, | 877 &SimpleSynchronousEntry::ReadData, base::Unretained(synchronous_entry_), |
880 base::Unretained(synchronous_entry_), | |
881 SimpleSynchronousEntry::EntryOperationData(stream_index, offset, buf_len), | 878 SimpleSynchronousEntry::EntryOperationData(stream_index, offset, buf_len), |
882 make_scoped_refptr(buf), | 879 base::RetainedRef(buf), read_crc32.get(), entry_stat.get(), result.get()); |
883 read_crc32.get(), | |
884 entry_stat.get(), | |
885 result.get()); | |
886 Closure reply = base::Bind(&SimpleEntryImpl::ReadOperationComplete, | 880 Closure reply = base::Bind(&SimpleEntryImpl::ReadOperationComplete, |
887 this, | 881 this, |
888 stream_index, | 882 stream_index, |
889 offset, | 883 offset, |
890 callback, | 884 callback, |
891 base::Passed(&read_crc32), | 885 base::Passed(&read_crc32), |
892 base::Passed(&entry_stat), | 886 base::Passed(&entry_stat), |
893 base::Passed(&result)); | 887 base::Passed(&result)); |
894 worker_pool_->PostTaskAndReply(FROM_HERE, task, reply); | 888 worker_pool_->PostTaskAndReply(FROM_HERE, task, reply); |
895 } | 889 } |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
970 // |last_modified_| yet, we make this approximation. | 964 // |last_modified_| yet, we make this approximation. |
971 last_used_ = last_modified_ = base::Time::Now(); | 965 last_used_ = last_modified_ = base::Time::Now(); |
972 | 966 |
973 have_written_[stream_index] = true; | 967 have_written_[stream_index] = true; |
974 // Writing on stream 1 affects the placement of stream 0 in the file, the EOF | 968 // Writing on stream 1 affects the placement of stream 0 in the file, the EOF |
975 // record will have to be rewritten. | 969 // record will have to be rewritten. |
976 if (stream_index == 1) | 970 if (stream_index == 1) |
977 have_written_[0] = true; | 971 have_written_[0] = true; |
978 | 972 |
979 scoped_ptr<int> result(new int()); | 973 scoped_ptr<int> result(new int()); |
980 Closure task = base::Bind(&SimpleSynchronousEntry::WriteData, | 974 Closure task = base::Bind( |
981 base::Unretained(synchronous_entry_), | 975 &SimpleSynchronousEntry::WriteData, base::Unretained(synchronous_entry_), |
982 SimpleSynchronousEntry::EntryOperationData( | 976 SimpleSynchronousEntry::EntryOperationData(stream_index, offset, buf_len, |
983 stream_index, offset, buf_len, truncate, | 977 truncate, doomed_), |
984 doomed_), | 978 base::RetainedRef(buf), entry_stat.get(), result.get()); |
985 make_scoped_refptr(buf), | |
986 entry_stat.get(), | |
987 result.get()); | |
988 Closure reply = base::Bind(&SimpleEntryImpl::WriteOperationComplete, | 979 Closure reply = base::Bind(&SimpleEntryImpl::WriteOperationComplete, |
989 this, | 980 this, |
990 stream_index, | 981 stream_index, |
991 callback, | 982 callback, |
992 base::Passed(&entry_stat), | 983 base::Passed(&entry_stat), |
993 base::Passed(&result)); | 984 base::Passed(&result)); |
994 worker_pool_->PostTaskAndReply(FROM_HERE, task, reply); | 985 worker_pool_->PostTaskAndReply(FROM_HERE, task, reply); |
995 } | 986 } |
996 | 987 |
997 void SimpleEntryImpl::ReadSparseDataInternal( | 988 void SimpleEntryImpl::ReadSparseDataInternal( |
998 int64_t sparse_offset, | 989 int64_t sparse_offset, |
999 net::IOBuffer* buf, | 990 net::IOBuffer* buf, |
1000 int buf_len, | 991 int buf_len, |
1001 const CompletionCallback& callback) { | 992 const CompletionCallback& callback) { |
1002 DCHECK(io_thread_checker_.CalledOnValidThread()); | 993 DCHECK(io_thread_checker_.CalledOnValidThread()); |
1003 ScopedOperationRunner operation_runner(this); | 994 ScopedOperationRunner operation_runner(this); |
1004 | 995 |
1005 if (net_log_.IsCapturing()) { | 996 if (net_log_.IsCapturing()) { |
1006 net_log_.AddEvent( | 997 net_log_.AddEvent( |
1007 net::NetLog::TYPE_SIMPLE_CACHE_ENTRY_READ_SPARSE_BEGIN, | 998 net::NetLog::TYPE_SIMPLE_CACHE_ENTRY_READ_SPARSE_BEGIN, |
1008 CreateNetLogSparseOperationCallback(sparse_offset, buf_len)); | 999 CreateNetLogSparseOperationCallback(sparse_offset, buf_len)); |
1009 } | 1000 } |
1010 | 1001 |
1011 DCHECK_EQ(STATE_READY, state_); | 1002 DCHECK_EQ(STATE_READY, state_); |
1012 state_ = STATE_IO_PENDING; | 1003 state_ = STATE_IO_PENDING; |
1013 | 1004 |
1014 scoped_ptr<int> result(new int()); | 1005 scoped_ptr<int> result(new int()); |
1015 scoped_ptr<base::Time> last_used(new base::Time()); | 1006 scoped_ptr<base::Time> last_used(new base::Time()); |
1016 Closure task = base::Bind(&SimpleSynchronousEntry::ReadSparseData, | 1007 Closure task = base::Bind( |
1017 base::Unretained(synchronous_entry_), | 1008 &SimpleSynchronousEntry::ReadSparseData, |
1018 SimpleSynchronousEntry::EntryOperationData( | 1009 base::Unretained(synchronous_entry_), |
1019 sparse_offset, buf_len), | 1010 SimpleSynchronousEntry::EntryOperationData(sparse_offset, buf_len), |
1020 make_scoped_refptr(buf), | 1011 base::RetainedRef(buf), last_used.get(), result.get()); |
1021 last_used.get(), | |
1022 result.get()); | |
1023 Closure reply = base::Bind(&SimpleEntryImpl::ReadSparseOperationComplete, | 1012 Closure reply = base::Bind(&SimpleEntryImpl::ReadSparseOperationComplete, |
1024 this, | 1013 this, |
1025 callback, | 1014 callback, |
1026 base::Passed(&last_used), | 1015 base::Passed(&last_used), |
1027 base::Passed(&result)); | 1016 base::Passed(&result)); |
1028 worker_pool_->PostTaskAndReply(FROM_HERE, task, reply); | 1017 worker_pool_->PostTaskAndReply(FROM_HERE, task, reply); |
1029 } | 1018 } |
1030 | 1019 |
1031 void SimpleEntryImpl::WriteSparseDataInternal( | 1020 void SimpleEntryImpl::WriteSparseDataInternal( |
1032 int64_t sparse_offset, | 1021 int64_t sparse_offset, |
(...skipping 18 matching lines...) Expand all Loading... |
1051 max_sparse_data_size = max_cache_size / kMaxSparseDataSizeDivisor; | 1040 max_sparse_data_size = max_cache_size / kMaxSparseDataSizeDivisor; |
1052 } | 1041 } |
1053 | 1042 |
1054 scoped_ptr<SimpleEntryStat> entry_stat( | 1043 scoped_ptr<SimpleEntryStat> entry_stat( |
1055 new SimpleEntryStat(last_used_, last_modified_, data_size_, | 1044 new SimpleEntryStat(last_used_, last_modified_, data_size_, |
1056 sparse_data_size_)); | 1045 sparse_data_size_)); |
1057 | 1046 |
1058 last_used_ = last_modified_ = base::Time::Now(); | 1047 last_used_ = last_modified_ = base::Time::Now(); |
1059 | 1048 |
1060 scoped_ptr<int> result(new int()); | 1049 scoped_ptr<int> result(new int()); |
1061 Closure task = base::Bind(&SimpleSynchronousEntry::WriteSparseData, | 1050 Closure task = base::Bind( |
1062 base::Unretained(synchronous_entry_), | 1051 &SimpleSynchronousEntry::WriteSparseData, |
1063 SimpleSynchronousEntry::EntryOperationData( | 1052 base::Unretained(synchronous_entry_), |
1064 sparse_offset, buf_len), | 1053 SimpleSynchronousEntry::EntryOperationData(sparse_offset, buf_len), |
1065 make_scoped_refptr(buf), | 1054 base::RetainedRef(buf), max_sparse_data_size, entry_stat.get(), |
1066 max_sparse_data_size, | 1055 result.get()); |
1067 entry_stat.get(), | |
1068 result.get()); | |
1069 Closure reply = base::Bind(&SimpleEntryImpl::WriteSparseOperationComplete, | 1056 Closure reply = base::Bind(&SimpleEntryImpl::WriteSparseOperationComplete, |
1070 this, | 1057 this, |
1071 callback, | 1058 callback, |
1072 base::Passed(&entry_stat), | 1059 base::Passed(&entry_stat), |
1073 base::Passed(&result)); | 1060 base::Passed(&result)); |
1074 worker_pool_->PostTaskAndReply(FROM_HERE, task, reply); | 1061 worker_pool_->PostTaskAndReply(FROM_HERE, task, reply); |
1075 } | 1062 } |
1076 | 1063 |
1077 void SimpleEntryImpl::GetAvailableRangeInternal( | 1064 void SimpleEntryImpl::GetAvailableRangeInternal( |
1078 int64_t sparse_offset, | 1065 int64_t sparse_offset, |
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1551 } | 1538 } |
1552 crc32s_end_offset_[stream_index] = offset + length; | 1539 crc32s_end_offset_[stream_index] = offset + length; |
1553 } else if (offset < crc32s_end_offset_[stream_index]) { | 1540 } else if (offset < crc32s_end_offset_[stream_index]) { |
1554 // If a range for which the crc32 was already computed is rewritten, the | 1541 // If a range for which the crc32 was already computed is rewritten, the |
1555 // computation of the crc32 need to start from 0 again. | 1542 // computation of the crc32 need to start from 0 again. |
1556 crc32s_end_offset_[stream_index] = 0; | 1543 crc32s_end_offset_[stream_index] = 0; |
1557 } | 1544 } |
1558 } | 1545 } |
1559 | 1546 |
1560 } // namespace disk_cache | 1547 } // namespace disk_cache |
OLD | NEW |