OLD | NEW |
---|---|
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_ |
OLD | NEW |