| 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 // TODO(dmurph): Consider storage size of the device. |
| 44 uint64_t max_blob_disk_space = 5ull * 1024 * 1024 * 1024; |
| 45 |
| 46 // This is the minimum file size we can use when paging blob items to disk. |
| 47 // We combine items until we reach at least this size. |
| 48 uint64_t min_page_file_size = 5 * 1024 * 1024; |
| 49 // This is the maximum file size we can create. |
| 50 uint64_t max_file_size = 100 * 1024 * 1024; |
| 51 }; |
| 52 |
| 23 enum class IPCBlobItemRequestStrategy { | 53 enum class IPCBlobItemRequestStrategy { |
| 24 UNKNOWN = 0, | 54 UNKNOWN = 0, |
| 25 IPC, | 55 IPC, |
| 26 SHARED_MEMORY, | 56 SHARED_MEMORY, |
| 27 FILE, | 57 FILE, |
| 28 LAST = FILE | 58 LAST = FILE |
| 29 }; | 59 }; |
| 30 | 60 |
| 31 // These items cannot be reordered or renumbered because they're recorded to | 61 // 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 | 62 // UMA. New items must be added immediately before LAST, and LAST must be set to |
| 33 // the the last item. | 63 // the the last item. |
| 64 // DEPRECATED, please use BlobStatus instead. |
| 34 enum class IPCBlobCreationCancelCode { | 65 enum class IPCBlobCreationCancelCode { |
| 35 UNKNOWN = 0, | 66 UNKNOWN = 0, |
| 36 OUT_OF_MEMORY = 1, | 67 OUT_OF_MEMORY = 1, |
| 37 // We couldn't create or write to a file. File system error, like a full disk. | 68 // We couldn't create or write to a file. File system error, like a full disk. |
| 38 FILE_WRITE_FAILED = 2, | 69 FILE_WRITE_FAILED = 2, |
| 39 // The renderer was destroyed while data was in transit. | 70 // The renderer was destroyed while data was in transit. |
| 40 SOURCE_DIED_IN_TRANSIT = 3, | 71 SOURCE_DIED_IN_TRANSIT = 3, |
| 41 // The renderer destructed the blob before it was done transferring, and there | 72 // 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 | 73 // were no outstanding references (no one is waiting to read) to keep the |
| 43 // blob alive. | 74 // blob alive. |
| 44 BLOB_DEREFERENCED_WHILE_BUILDING = 4, | 75 BLOB_DEREFERENCED_WHILE_BUILDING = 4, |
| 45 // A blob that we referenced during construction is broken, or a browser-side | 76 // 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 | 77 // builder tries to build a blob with a blob reference that isn't finished |
| 47 // constructing. | 78 // constructing. |
| 48 REFERENCED_BLOB_BROKEN = 5, | 79 REFERENCED_BLOB_BROKEN = 5, |
| 49 LAST = REFERENCED_BLOB_BROKEN | 80 LAST = REFERENCED_BLOB_BROKEN |
| 50 }; | 81 }; |
| 51 | 82 |
| 83 // This is the enum to rule them all in the blob system. |
| 84 // These values are used in UMA metrics, so they should not be changed. Please |
| 85 // update LAST_ERROR if you add an error condition and LAST if you add new |
| 86 // state. |
| 87 enum class BlobStatus { |
| 88 // Error case section: |
| 89 // The construction arguments are invalid. This is considered a bad ipc. |
| 90 ERR_INVALID_CONSTRUCTION_ARGUMENTS = 0, |
| 91 // We don't have enough memory for the blob. |
| 92 ERR_OUT_OF_MEMORY = 1, |
| 93 // We couldn't create or write to a file. File system error, like a full disk. |
| 94 ERR_FILE_WRITE_FAILED = 2, |
| 95 // The renderer was destroyed while data was in transit. |
| 96 ERR_SOURCE_DIED_IN_TRANSIT = 3, |
| 97 // The renderer destructed the blob before it was done transferring, and there |
| 98 // were no outstanding references (no one is waiting to read) to keep the |
| 99 // blob alive. |
| 100 ERR_BLOB_DEREFERENCED_WHILE_BUILDING = 4, |
| 101 // A blob that we referenced during construction is broken, or a browser-side |
| 102 // builder tries to build a blob with a blob reference that isn't finished |
| 103 // constructing. |
| 104 ERR_REFERENCED_BLOB_BROKEN = 5, |
| 105 LAST_ERROR = ERR_REFERENCED_BLOB_BROKEN, |
| 106 |
| 107 // Blob state section: |
| 108 // The blob has finished. |
| 109 DONE = 200, |
| 110 // The system is pending on quota being granted, the transport layer |
| 111 // populating pending data, and/or copying data from dependent blobs. See |
| 112 // InternalBlobData::BuildingState determine which of these are happening, as |
| 113 // they all can happen concurrently. |
| 114 PENDING = 201, |
| 115 LAST = PENDING |
| 116 }; |
| 117 |
| 118 using BlobStatusCallback = base::Callback<void(BlobStatus)>; |
| 119 |
| 120 // Returns if the status is an error code. |
| 121 STORAGE_COMMON_EXPORT bool BlobStatusIsError(BlobStatus status); |
| 122 |
| 123 // Returns if the status is a bad enough error to flag the IPC as bad. This is |
| 124 // only INVALID_CONSTRUCTION_ARGUMENTS. |
| 125 STORAGE_COMMON_EXPORT bool BlobStatusIsBadIPC(BlobStatus status); |
| 126 |
| 52 } // namespace storage | 127 } // namespace storage |
| 53 | 128 |
| 54 #endif // STORAGE_COMMON_BLOB_STORAGE_BLOB_STORAGE_CONSTANTS_H_ | 129 #endif // STORAGE_COMMON_BLOB_STORAGE_BLOB_STORAGE_CONSTANTS_H_ |
| OLD | NEW |