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

Unified Diff: tools/perf/page_sets/blob/blob-workshop.html

Issue 1104053006: [Storage] Blob Storage perf tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: copyright fix Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/perf/benchmarks/blob_storage.py ('k') | tools/perf/page_sets/blob_workshop.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/perf/page_sets/blob/blob-workshop.html
diff --git a/tools/perf/page_sets/blob/blob-workshop.html b/tools/perf/page_sets/blob/blob-workshop.html
new file mode 100644
index 0000000000000000000000000000000000000000..ef71e6fae2a1a03abbe4ff042e70836d3419f9d8
--- /dev/null
+++ b/tools/perf/page_sets/blob/blob-workshop.html
@@ -0,0 +1,169 @@
+<script>
+var blobs = [];
+var bytes = 0;
+var timeStart;
+var timeEnd;
+var doneReading = false;
+var errors = [];
+var disableUI = false;
+
+function recordError(error) {
+ console.log(error);
+ errors.push(error);
+}
+
+function updateStats() {
+ if (disableUI) return;
+ var num_blobs = document.getElementById('num_blobs');
+ var total_bytes = document.getElementById('total_bytes');
+ var time = document.getElementById('time');
+ num_blobs.innerHTML = '' + blobs.length;
+ total_bytes.innerHTML = '' + bytes;
+ time.innerHTML = '' + (timeEnd - timeStart);
+}
+
+function createAndRead(size) {
+ doneReading = false;
+ errors = [];
+ var reader = new FileReader();
+ var currentBlob = 0;
+ var totalSize = 0;
+ var error = document.getElementById('error');
+ var numRead = 0;
+
+ var blob = new Blob([new Uint8Array(size)], {type: 'application/octet-string'});
+
+ reader.onloadend = function(e) {
+ if (reader.error) {
+ recordError('Error when reading blob: ' + reader.error);
+ doneReading = true;
+ return;
+ }
+ if (reader.result.byteLength != size) {
+ recordError("Sizes don't match");
+ }
+ doneReading = true;
+ }
+ reader.readAsArrayBuffer(blob);
+}
+
+function createBlob(size) {
+ timeStart = performance.now();
+ var blob = new Blob([new Uint8Array(size)], {type: 'application/octet-string'});
+ timeEnd = performance.now();
+ blobs.push(blob);
+ bytes += size;
+ updateStats();
+}
+
+function garbageCollect() {
+ blobs = [];
+ bytes = 0;
+ updateStats();
+}
+
+function addCustom() {
+ var custom_input = document.getElementById('custom_input');
+ var custom_bytes = custom_input.value;
+ createBlob(custom_bytes * 1);
+}
+
+function readBlobsSerially() {
+ doneReading = false;
+ errors = [];
+ if (blobs.length == 0) {
+ return;
+ }
+ timeStart = performance.now();
+ var reader = new FileReader();
+ var currentBlob = 0;
+ var totalSize = 0;
+ var error = document.getElementById('error');
+ var numRead = 0;
+ reader.onloadend = function(e) {
+ if (reader.error) {
+ if (!disableUI)
+ error.innerHTML += '<br/>Reader error:<br/>' + reader.error.message;
+ recordError('Error when reading blob ' + currentBlob + ': ' + reader.error);
+ doneReading = true;
+ return;
+ }
+ totalSize += reader.result.byteLength;
+ currentBlob++;
+ if (currentBlob < blobs.length) {
+ reader.readAsArrayBuffer(blobs[currentBlob]);
+ } else {
+ timeEnd = performance.now();
+ // we're done reading
+ if (totalSize != bytes) {
+ recordError("Sizes don't match");
+ if (!disableUI)
+ error.innerHTML += '<br/>Sizes don\'t match: ' + totalSize + ' vs ' + bytes;
+ }
+ doneReading = true;
+ updateStats();
+ }
+ }
+ reader.readAsArrayBuffer(blobs[currentBlob]);
+}
+function readBlobsInParallel() {
+ doneReading = false;
+ errors = [];
+ if (blobs.length == 0) {
+ return;
+ }
+ timeStart = performance.now();
+ var currentBlob = 0;
+ var totalSize = 0;
+ var error = document.getElementById('error');
+ var numRead = 0;
+ for (; currentBlob < blobs.length; currentBlob++) {
+ var genReader = function(index) {
+ var reader = new FileReader();
+ reader.onloadend = function(e) {
+ if (reader.error) {
+ if (!disableUI)
+ error.innerHTML += '<br/>Reader error:<br/>' + reader.error.message;
+ recordError('Error when reading blob ' + index + ': ' + reader.error);
+ doneReading = true;
+ return;
+ }
+ totalSize += reader.result.byteLength;
+ numRead++;
+ if (numRead >= blobs.length) {
+ timeEnd = performance.now();
+ // we're done reading
+ if (totalSize != bytes) {
+ recordError("Sizes don't match");
+ if (!disableUI)
+ error.innerHTML += '<br/>Sizes don\'t match: ' + totalSize + ' vs ' + bytes;
+ }
+ doneReading = true;
+ updateStats();
+ }
+ }
+ return reader;
+ }
+ genReader(currentBlob).readAsArrayBuffer(blobs[currentBlob]);
+ }
+}
+</script>
+<div>Number of blobs: <span id="num_blobs">0</span>, total memory size: <span id="total_bytes">0</span> bytes.</div>
+<input type="button" id="custom_input_submit" value="Add Blob with Size" onclick="addCustom();"/>
+<input type="text" inputmode="numeric" id="custom_input" value=""/><br/>
+
+Shorcut buttons for person:
+<input type="button" value="2 bytes" onclick="createBlob(2);" />
+<input type="button" value="1 kb" onclick="createBlob(1024);" />
+<input type="button" value="16 kb" onclick="createBlob(16*1024);" />
+<input type="button" value="1 mb" onclick="createBlob(1024 * 1024);" />
+<input type="button" value="40 mb" onclick="createBlob(40 * 1024 * 1024);" />
+<input type="button" value="400 mb" onclick="createBlob(400 * 1024 * 1024);" />
+
+<input type="button" id="read_blobs_serial" value="Read Blobs Serially" onclick="readBlobsSerially();" />
+<input type="button" id="read_blobs_parallel" value="Read Blobs Parallel" onclick="readBlobsInParallel();" /><br/>
+<input type="button" id="garbage_collect" value="Garbage Collect Blobs" onclick="garbageCollect();" /><br/>
+Operation Time:
+<div id="time"></div>
+Errors:
+<div id="error"></div>
« no previous file with comments | « tools/perf/benchmarks/blob_storage.py ('k') | tools/perf/page_sets/blob_workshop.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698