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

Side by Side Diff: storage/common/blob_storage/blob_storage_constants.h

Issue 2339933004: [BlobStorage] BlobMemoryController & tests (Closed)
Patch Set: format and hopefully windows fix Created 4 years, 2 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #ifndef STORAGE_COMMON_BLOB_STORAGE_BLOB_STORAGE_CONSTANTS_H_ 5 #ifndef STORAGE_COMMON_BLOB_STORAGE_BLOB_STORAGE_CONSTANTS_H_
6 #define STORAGE_COMMON_BLOB_STORAGE_BLOB_STORAGE_CONSTANTS_H_ 6 #define STORAGE_COMMON_BLOB_STORAGE_BLOB_STORAGE_CONSTANTS_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
11 #include "base/callback_forward.h"
12 #include "storage/common/storage_common_export.h"
13
11 namespace storage { 14 namespace storage {
12 15
13 // TODO(michaeln): use base::SysInfo::AmountOfPhysicalMemoryMB() in some 16 // All sizes are in bytes. Deprecated, please use BlobStorageLimits.
14 // way to come up with a better limit.
15 const int64_t kBlobStorageMaxMemoryUsage = 500 * 1024 * 1024; // Half a gig. 17 const int64_t kBlobStorageMaxMemoryUsage = 500 * 1024 * 1024; // Half a gig.
16 const size_t kBlobStorageIPCThresholdBytes = 250 * 1024; 18 const size_t kBlobStorageIPCThresholdBytes = 250 * 1024;
17 const size_t kBlobStorageMaxSharedMemoryBytes = 10 * 1024 * 1024; 19 const size_t kBlobStorageMaxSharedMemoryBytes = 10 * 1024 * 1024;
18 const uint64_t kBlobStorageMaxFileSizeBytes = 100 * 1024 * 1024; 20 const uint64_t kBlobStorageMaxFileSizeBytes = 100 * 1024 * 1024;
19 const uint64_t kBlobStorageMinFileSizeBytes = 1 * 1024 * 1024; 21 const uint64_t kBlobStorageMinFileSizeBytes = 1 * 1024 * 1024;
20 const size_t kBlobStorageMaxBlobMemorySize = 22 const size_t kBlobStorageMaxBlobMemorySize =
21 kBlobStorageMaxMemoryUsage - kBlobStorageMinFileSizeBytes; 23 kBlobStorageMaxMemoryUsage - kBlobStorageMinFileSizeBytes;
22 24
25 // All sizes are in bytes.
26 struct BlobStorageLimits {
27 size_t memory_limit_before_paging() const {
28 return max_blob_in_memory_space - in_flight_space;
29 }
30
31 // This is the maximum amount of memory we can send in an IPC.
32 size_t max_ipc_memory_size = 250 * 1024;
33 // This is the maximum size of a shared memory handle.
34 size_t max_shared_memory_size = 10 * 1024 * 1024;
35
36 // This is the maximum amount of memory we can use to store blobs.
37 size_t max_blob_in_memory_space = 500 * 1024 * 1024;
38 // This is the maximum amount of memory reserved for blob items that we're
39 // currently writing to disk.
40 size_t in_flight_space = 5 * 1024 * 1024;
41
42 // This is the maximum amount of disk space we can use.
43 uint64_t max_blob_disk_space = 5ull * 1024 * 1024 * 1024;
michaeln 2016/10/18 00:56:25 the size of the storage device probably needs to b
dmurph 2016/10/18 20:24:45 I added a TODO.
44
45 // This is the minimum file size we can use when paging blob items to disk.
46 // We combine items until we reach at least this size.
47 uint64_t min_page_file_size = 5 * 1024 * 1024;
48 // This is the maximum file size we can create.
49 uint64_t max_file_size = 100 * 1024 * 1024;
50 };
51
23 enum class IPCBlobItemRequestStrategy { 52 enum class IPCBlobItemRequestStrategy {
24 UNKNOWN = 0, 53 UNKNOWN = 0,
25 IPC, 54 IPC,
26 SHARED_MEMORY, 55 SHARED_MEMORY,
27 FILE, 56 FILE,
28 LAST = FILE 57 LAST = FILE
29 }; 58 };
30 59
31 // These items cannot be reordered or renumbered because they're recorded to 60 // These items cannot be reordered or renumbered because they're recorded to
32 // UMA. New items must be added immediately before LAST, and LAST must be set to 61 // UMA. New items must be added immediately before LAST, and LAST must be set to
33 // the the last item. 62 // the the last item.
63 // DEPRECATED, please use BlobStatus instead.
34 enum class IPCBlobCreationCancelCode { 64 enum class IPCBlobCreationCancelCode {
35 UNKNOWN = 0, 65 UNKNOWN = 0,
36 OUT_OF_MEMORY = 1, 66 OUT_OF_MEMORY = 1,
37 // We couldn't create or write to a file. File system error, like a full disk. 67 // We couldn't create or write to a file. File system error, like a full disk.
38 FILE_WRITE_FAILED = 2, 68 FILE_WRITE_FAILED = 2,
39 // The renderer was destroyed while data was in transit. 69 // The renderer was destroyed while data was in transit.
40 SOURCE_DIED_IN_TRANSIT = 3, 70 SOURCE_DIED_IN_TRANSIT = 3,
41 // The renderer destructed the blob before it was done transferring, and there 71 // The renderer destructed the blob before it was done transferring, and there
42 // were no outstanding references (no one is waiting to read) to keep the 72 // were no outstanding references (no one is waiting to read) to keep the
43 // blob alive. 73 // blob alive.
44 BLOB_DEREFERENCED_WHILE_BUILDING = 4, 74 BLOB_DEREFERENCED_WHILE_BUILDING = 4,
45 // A blob that we referenced during construction is broken, or a browser-side 75 // A blob that we referenced during construction is broken, or a browser-side
46 // builder tries to build a blob with a blob reference that isn't finished 76 // builder tries to build a blob with a blob reference that isn't finished
47 // constructing. 77 // constructing.
48 REFERENCED_BLOB_BROKEN = 5, 78 REFERENCED_BLOB_BROKEN = 5,
49 LAST = REFERENCED_BLOB_BROKEN 79 LAST = REFERENCED_BLOB_BROKEN
50 }; 80 };
51 81
82 // This is the enum to rule them all in the blob system.
83 // These values are used in UMA metrics, so they should not be changed. Please
84 // update LAST_ERROR if you add an error condition and LAST if you add new
85 // state.
86 enum class BlobStatus {
87 // Error case section:
88 // The construction arguments are invalid. This is considered a bad ipc.
89 ERR_INVALID_CONSTRUCTION_ARGUMENTS = 0,
90 // We don't have enough memory for the blob.
91 ERR_OUT_OF_MEMORY = 1,
92 // We couldn't create or write to a file. File system error, like a full disk.
93 ERR_FILE_WRITE_FAILED = 2,
94 // The renderer was destroyed while data was in transit.
95 ERR_SOURCE_DIED_IN_TRANSIT = 3,
96 // The renderer destructed the blob before it was done transferring, and there
97 // were no outstanding references (no one is waiting to read) to keep the
98 // blob alive.
99 ERR_BLOB_DEREFERENCED_WHILE_BUILDING = 4,
100 // A blob that we referenced during construction is broken, or a browser-side
101 // builder tries to build a blob with a blob reference that isn't finished
102 // constructing.
103 ERR_REFERENCED_BLOB_BROKEN = 5,
104 LAST_ERROR = ERR_REFERENCED_BLOB_BROKEN,
105
106 // Blob state section:
107 // The blob has finished.
108 DONE = 200,
109 // The system is pending on quota being granted, the transport layer
110 // populating pending data, and/or copying data from dependent blobs. See
111 // InternalBlobData::BuildingState determine which of these are happening, as
112 // they all can happen concurrently.
113 PENDING = 201,
114 LAST = PENDING
115 };
116
117 using BlobStatusCallback = base::Callback<void(BlobStatus)>;
118
119 // Returns if the status is an error code.
120 STORAGE_COMMON_EXPORT bool BlobStatusIsError(BlobStatus status);
121
122 // Returns if the status is a bad enough error to flag the IPC as bad. This is
123 // only INVALID_CONSTRUCTION_ARGUMENTS.
124 STORAGE_COMMON_EXPORT bool BlobStatusIsBadIPC(BlobStatus status);
125
52 } // namespace storage 126 } // namespace storage
53 127
54 #endif // STORAGE_COMMON_BLOB_STORAGE_BLOB_STORAGE_CONSTANTS_H_ 128 #endif // STORAGE_COMMON_BLOB_STORAGE_BLOB_STORAGE_CONSTANTS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698