Description[Blob] Disk support for blob storage.
This is the final patch to enable disk support for Blob storage. This
includes:
* Saving large blobs to disk right away
* Paging old blobs to disk
The new system operates like the following:
* Blobs are registered with metadata & descriptions of items in one
message/call.
* The async transport host asks the memory manager how it should
transfer the data, and from that creates a BlobDataBuilder.
* This builder is handed to the BlobStorageContext in BuildBlob, along
with a callback that the transport host will wait for before kicking
off transport.
* The BuildBlob call immediately constructs the internal blob data
with all ShareableBlobDataItems that will eventually be populated.
This work includes:
* Decomposing all blobs we depend upon and either copying over or
creating new shareable items for partial data items.
* The new shareable item data will be copied over after the
dependent blob is complete, and we have enough memory for it.
* This involves using the new BlobFlattener and BlobSlice stucts.
* This results in us knowing the total amount of memory we need to
build this blob (new memory + copies from other blobs). We ask the
memory controller to reserve quota for these items in separate
calls.
* We now wait for the following before completing our blob:
1. Blobs that we referenced are finished building,
2. We have been granted memory quota for any copies from referenced
blobs, and
3. We have been granted memory or disk quota for blob memory coming
from the renderer.
* When all of these conditions have been satisfied we finish the blob:
1. Perform any copies that we need to do from referenced blobs.
2. Change our state to DONE.
3. Report to listeners that we've finished constructing.
New data stored:
* We've combined error and states into one BlobStatus.
* Building state has been consolidated into a BuildingState struct in
InternalBlobData.
* ShareableBlobDataItems now have state so the memory controller can
keep track of which items to grant/release quota.
STATUS:
Debugging logging & lots of DCHECKs are present.
BUG=375297, 612261
Patch Set 1 #Patch Set 2 : PAging working! #Patch Set 3 : fixes, working w/ Layout tests #
Total comments: 9
Patch Set 4 : Added back transport controller test, small cleanups #
Total comments: 24
Patch Set 5 : WIP don't review this one #Patch Set 6 : comments, simplifications #
Total comments: 48
Patch Set 7 : comments, simplification of enums into ONE #
Total comments: 37
Patch Set 8 : halfway done with comments #Patch Set 9 : comments #
Total comments: 77
Patch Set 10 : comments, new tests, bug fixes #Patch Set 11 : rebase #
Total comments: 6
Patch Set 12 : build and browsertest fixes #
Total comments: 18
Patch Set 13 : More tests, got through half of the comments #Patch Set 14 : Finished comments, added new pending enum state #
Total comments: 70
Patch Set 15 : comments, moved Entry to InternalBlobData #Patch Set 16 : Fixed layout tests, cleaned up test visibility #
Total comments: 7
Patch Set 17 : BlobMemoryController refactor #Patch Set 18 : Combined BlobSlice & BlobFlattener files, more comments, a little cleanup. #Patch Set 19 : Combined BlobSlice & BlobFlattener files, more comments, a little cleanup. #
Total comments: 120
Patch Set 20 : memory controller pass #Patch Set 21 : half of comments #
Total comments: 5
Patch Set 22 : Rebase w/ BlobMemoryController patch #Patch Set 23 : rebase #Depends on Patchset: Messages
Total messages: 67 (32 generated)
|