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

Unified Diff: ui/file_manager/file_manager/background/js/media_import_handler.js

Issue 980603003: Move content deduplication into the scan process. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Respond to review comments. Created 5 years, 10 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
Index: ui/file_manager/file_manager/background/js/media_import_handler.js
diff --git a/ui/file_manager/file_manager/background/js/media_import_handler.js b/ui/file_manager/file_manager/background/js/media_import_handler.js
index 055c5f3355162fdc7013358400ce0dfb3d5117c8..a796cf5034723b492522690d61d4437b372a999c 100644
--- a/ui/file_manager/file_manager/background/js/media_import_handler.js
+++ b/ui/file_manager/file_manager/background/js/media_import_handler.js
@@ -32,11 +32,9 @@ importer.ImportRunner.prototype.importFromScanResult;
*
* @param {!ProgressCenter} progressCenter
* @param {!importer.HistoryLoader} historyLoader
- * @param {!importer.DuplicateFinder.Factory} duplicateFinderFactory
* @param {!analytics.Tracker} tracker
*/
-importer.MediaImportHandler =
- function(progressCenter, historyLoader, duplicateFinderFactory, tracker) {
+importer.MediaImportHandler = function(progressCenter, historyLoader, tracker) {
/** @private {!ProgressCenter} */
this.progressCenter_ = progressCenter;
@@ -54,9 +52,6 @@ importer.MediaImportHandler =
chrome.power.releaseKeepAwake();
});
- /** @private {!importer.DuplicateFinder.Factory} */
- this.duplicateFinderFactory_ = duplicateFinderFactory;
-
/** @private {!analytics.Tracker} */
this.tracker_ = tracker;
@@ -73,7 +68,6 @@ importer.MediaImportHandler.prototype.importFromScanResult =
this.historyLoader_,
scanResult,
directoryPromise,
- this.duplicateFinderFactory_.create(),
destination,
this.tracker_);
@@ -155,8 +149,6 @@ importer.MediaImportHandler.prototype.onTaskProgress_ =
* @param {!importer.HistoryLoader} historyLoader
* @param {!importer.ScanResult} scanResult
* @param {!Promise<!DirectoryEntry>} directoryPromise
- * @param {!importer.DuplicateFinder} duplicateFinder A duplicate-finder linked
- * to the import destination, that will be used to deduplicate imports.
* @param {!importer.Destination} destination The logical destination.
* @param {!analytics.Tracker} tracker
*/
@@ -165,7 +157,6 @@ importer.MediaImportHandler.ImportTask = function(
historyLoader,
scanResult,
directoryPromise,
- duplicateFinder,
destination,
tracker) {
@@ -179,9 +170,6 @@ importer.MediaImportHandler.ImportTask = function(
/** @private {!Promise<!DirectoryEntry>} */
this.directoryPromise_ = directoryPromise;
- /** @private {!importer.DuplicateFinder} */
- this.deduplicator_ = duplicateFinder;
-
/** @private {!importer.ScanResult} */
this.scanResult_ = scanResult;
@@ -206,9 +194,6 @@ importer.MediaImportHandler.ImportTask = function(
/** @private {boolean} Indicates whether this task was canceled. */
this.canceled_ = false;
- /** @private {number} Number of files deduped by content dedupe. */
- this.dedupeCount_ = 0;
-
/** @private {number} */
this.errorCount_ = 0;
};
@@ -277,14 +262,11 @@ importer.MediaImportHandler.ImportTask.prototype.requestCancel = function() {
/** @private */
importer.MediaImportHandler.ImportTask.prototype.initialize_ = function() {
var stats = this.scanResult_.getStatistics();
-
this.remainingFilesCount_ = stats.newFileCount;
this.totalBytes_ = stats.sizeBytes;
this.notify(importer.TaskQueue.UpdateType.PROGRESS);
this.tracker_.send(metrics.ImportEvents.STARTED);
- this.tracker_.send(metrics.ImportEvents.HISTORY_DEDUPE_COUNT
- .value(stats.duplicateFileCount));
};
/**
@@ -321,22 +303,7 @@ importer.MediaImportHandler.ImportTask.prototype.importOne_ =
return;
}
- this.deduplicator_.checkDuplicate(entry)
- .then(
- /** @param {boolean} isDuplicate */
- function(isDuplicate) {
- if (isDuplicate) {
- // If the given file is a duplicate, don't import it again. Just
- // update the progress indicator.
- this.dedupeCount_++;
- this.markAsImported_(entry);
- this.processedBytes_ += entry.size;
- this.notify(importer.TaskQueue.UpdateType.PROGRESS);
- return Promise.resolve();
- } else {
- return this.copy_(entry, destinationDirectory);
- }
- }.bind(this))
+ this.copy_(entry, destinationDirectory)
// Regardless of the result of this copy, push on to the next file.
.then(completionCallback)
.catch(
@@ -479,37 +446,50 @@ importer.MediaImportHandler.ImportTask.prototype.markAsImported_ =
/** @private */
importer.MediaImportHandler.ImportTask.prototype.onSuccess_ = function() {
this.notify(importer.TaskQueue.UpdateType.COMPLETE);
- this.tracker_.send(metrics.ImportEvents.ENDED);
this.sendImportStats_();
};
/**
* Sends import statistics to analytics.
*/
-importer.MediaImportHandler.ImportTask.prototype.sendImportStats_ = function() {
+importer.MediaImportHandler.ImportTask.prototype.sendImportStats_ =
+ function() {
+
+ var scanStats = this.scanResult_.getStatistics();
+
this.tracker_.send(
- metrics.ImportEvents.CONTENT_DEDUPE_COUNT
- .value(this.dedupeCount_));
- // TODO(kenobi): Send correct import byte counts.
- var importFileCount = this.scanResult_.getStatistics().newFileCount -
- (this.dedupeCount_ + this.remainingFilesCount_);
+ metrics.ImportEvents.MEGABYTES_IMPORTED.value(
+ // Make megabytes of our bytes.
+ Math.floor(this.processedBytes_ / (1024 * 1024))));
+
this.tracker_.send(
- metrics.ImportEvents.FILE_COUNT
- .value(importFileCount));
-
- this.tracker_.send(metrics.ImportEvents.ERROR.value(this.errorCount_));
-
- // Send aggregate deduplication timings, to avoid flooding analytics with one
- // timing per file.
- var deduplicatorStats = this.deduplicator_.getStatistics();
- this.tracker_.sendTiming(
- metrics.Categories.ACQUISITION,
- metrics.timing.Variables.COMPUTE_HASH,
- deduplicatorStats.computeHashTime,
- 'In Place');
- this.tracker_.sendTiming(
- metrics.Categories.ACQUISITION,
- metrics.timing.Variables.SEARCH_BY_HASH,
- deduplicatorStats.searchHashTime);
+ metrics.ImportEvents.FILES_IMPORTED.value(
+ // Substract the remaining files, in case the task was cancelled.
+ scanStats.newFileCount - this.remainingFilesCount_));
+ if (this.errorCount_ > 0) {
+ this.tracker_.send(metrics.ImportEvents.ERRORS.value(this.errorCount_));
+ }
+
+ // Finally we want to report on the number of duplicates
+ // that were identified during scanning.
+ var totalDeduped = 0;
+ Object.keys(scanStats.duplicates).forEach(
+ /**
+ * @param {!importer.Disposition} disposition
+ * @this {importer.MediaImportHandler.ImportTask}
+ */
+ function(disposition) {
+ var count = scanStats.duplicates[disposition];
+ totalDeduped += count;
+ this.tracker_.send(
+ metrics.ImportEvents.FILES_DEDUPLICATED
+ .label(disposition)
+ .value(count));
+ }.bind(this));
+
+ this.tracker_.send(
+ metrics.ImportEvents.FILES_DEDUPLICATED
+ .label('all-duplicates')
+ .value(totalDeduped));
};

Powered by Google App Engine
This is Rietveld 408576698