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

Side by Side Diff: ui/file_manager/file_manager/foreground/js/directory_contents.js

Issue 293053006: Files.app: Introduce AsyncUtil.ConcurrentQueue (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed the comment Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 'use strict'; 5 'use strict';
6 6
7 /** 7 /**
8 * Scanner of the entries. 8 * Scanner of the entries.
9 * @constructor 9 * @constructor
10 */ 10 */
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 */ 559 */
560 DirectoryContents.prototype.cancelScan = function() { 560 DirectoryContents.prototype.cancelScan = function() {
561 if (this.scanCancelled_) 561 if (this.scanCancelled_)
562 return; 562 return;
563 this.scanCancelled_ = true; 563 this.scanCancelled_ = true;
564 if (this.scanner_) 564 if (this.scanner_)
565 this.scanner_.cancel(); 565 this.scanner_.cancel();
566 566
567 this.onScanFinished_(); 567 this.onScanFinished_();
568 568
569 // Cancels the current prefetchMetadata queue and replaces it with new one.
569 this.prefetchMetadataQueue_.cancel(); 570 this.prefetchMetadataQueue_.cancel();
571 this.prefetchMetadataQueue_ = new AsyncUtil.Queue();
hirono 2014/05/26 09:19:42 Does it really need to reassign a new queue? It lo
yoshiki 2014/05/26 09:36:33 That's right. Removed.
572
570 cr.dispatchSimpleEvent(this, 'scan-cancelled'); 573 cr.dispatchSimpleEvent(this, 'scan-cancelled');
571 }; 574 };
572 575
573 /** 576 /**
574 * Called when the scanning by scanner_ is done, even when the scanning is 577 * Called when the scanning by scanner_ is done, even when the scanning is
575 * succeeded or failed. This is called before completion (or error) callback. 578 * succeeded or failed. This is called before completion (or error) callback.
576 * 579 *
577 * @private 580 * @private
578 */ 581 */
579 DirectoryContents.prototype.onScanFinished_ = function() { 582 DirectoryContents.prototype.onScanFinished_ = function() {
580 this.scanner_ = null; 583 this.scanner_ = null;
581 584
582 this.prefetchMetadataQueue_.run(function(callback) { 585 this.prefetchMetadataQueue_.run(function(callback, cancelled) {
586 if (cancelled)
587 return callback();
588
583 // TODO(yoshiki): Here we should fire the update event of changed 589 // TODO(yoshiki): Here we should fire the update event of changed
584 // items. Currently we have a method this.fileList_.updateIndex() to 590 // items. Currently we have a method this.fileList_.updateIndex() to
585 // fire an event, but this method takes only 1 argument and invokes sort 591 // fire an event, but this method takes only 1 argument and invokes sort
586 // one by one. It is obviously time wasting. Instead, we call sort 592 // one by one. It is obviously time wasting. Instead, we call sort
587 // directory. 593 // directory.
588 // In future, we should implement a good method like updateIndexes and 594 // In future, we should implement a good method like updateIndexes and
589 // use it here. 595 // use it here.
590 var status = this.fileList_.sortStatus; 596 var status = this.fileList_.sortStatus;
591 if (status) 597 if (status)
592 this.fileList_.sort(status.field, status.direction); 598 this.fileList_.sort(status.field, status.direction);
593 599
594 callback(); 600 callback();
595 }.bind(this)); 601 }.bind(this));
596 }; 602 };
597 603
598 /** 604 /**
599 * Called when the scanning by scanner_ is succeeded. 605 * Called when the scanning by scanner_ is succeeded.
600 * @private 606 * @private
601 */ 607 */
602 DirectoryContents.prototype.onScanCompleted_ = function() { 608 DirectoryContents.prototype.onScanCompleted_ = function() {
603 if (this.scanCancelled_) 609 if (this.scanCancelled_)
604 return; 610 return;
605 611
606 this.prefetchMetadataQueue_.run(function(callback) { 612 this.prefetchMetadataQueue_.run(function(callback, cancelled) {
hirono 2014/05/26 09:19:42 What is difference between this.scanCancelled_ and
yoshiki 2014/05/26 09:36:33 In this case, they are same. But in general, the c
hirono 2014/05/26 09:41:04 How about removing this.scanCancelled_ and using t
607 // Call callback first, so isScanning() returns false in the event handlers. 613 // Call callback first, so isScanning() returns false in the event handlers.
608 callback(); 614 callback();
609 615
610 cr.dispatchSimpleEvent(this, 'scan-completed'); 616 if (!cancelled)
617 cr.dispatchSimpleEvent(this, 'scan-completed');
611 }.bind(this)); 618 }.bind(this));
612 }; 619 };
613 620
614 /** 621 /**
615 * Called in case scan has failed. Should send the event. 622 * Called in case scan has failed. Should send the event.
616 * @private 623 * @private
617 */ 624 */
618 DirectoryContents.prototype.onScanError_ = function() { 625 DirectoryContents.prototype.onScanError_ = function() {
619 if (this.scanCancelled_) 626 if (this.scanCancelled_)
620 return; 627 return;
621 628
622 this.prefetchMetadataQueue_.run(function(callback) { 629 this.prefetchMetadataQueue_.run(function(callback, cancelled) {
623 // Call callback first, so isScanning() returns false in the event handlers. 630 // Call callback first, so isScanning() returns false in the event handlers.
624 callback(); 631 callback();
625 cr.dispatchSimpleEvent(this, 'scan-failed'); 632
633 if (!cancelled)
634 cr.dispatchSimpleEvent(this, 'scan-failed');
626 }.bind(this)); 635 }.bind(this));
627 }; 636 };
628 637
629 /** 638 /**
630 * Called when some chunk of entries are read by scanner. 639 * Called when some chunk of entries are read by scanner.
631 * @param {Array.<Entry>} entries The list of the scanned entries. 640 * @param {Array.<Entry>} entries The list of the scanned entries.
632 * @private 641 * @private
633 */ 642 */
634 DirectoryContents.prototype.onNewEntries_ = function(entries) { 643 DirectoryContents.prototype.onNewEntries_ = function(entries) {
635 if (this.scanCancelled_) 644 if (this.scanCancelled_)
(...skipping 12 matching lines...) Expand all
648 cr.dispatchSimpleEvent(this, 'scan-updated'); 657 cr.dispatchSimpleEvent(this, 'scan-updated');
649 658
650 this.context_.metadataCache.setCacheSize(this.fileList_.length); 659 this.context_.metadataCache.setCacheSize(this.fileList_.length);
651 660
652 // Because the prefetchMetadata can be slow, throttling by splitting entries 661 // Because the prefetchMetadata can be slow, throttling by splitting entries
653 // into smaller chunks to reduce UI latency. 662 // into smaller chunks to reduce UI latency.
654 // TODO(hidehiko,mtomasz): This should be handled in MetadataCache. 663 // TODO(hidehiko,mtomasz): This should be handled in MetadataCache.
655 var MAX_CHUNK_SIZE = 50; 664 var MAX_CHUNK_SIZE = 50;
656 for (var i = 0; i < entriesFiltered.length; i += MAX_CHUNK_SIZE) { 665 for (var i = 0; i < entriesFiltered.length; i += MAX_CHUNK_SIZE) {
657 var chunk = entriesFiltered.slice(i, i + MAX_CHUNK_SIZE); 666 var chunk = entriesFiltered.slice(i, i + MAX_CHUNK_SIZE);
658 this.prefetchMetadataQueue_.run(function(chunk, callback) { 667 this.prefetchMetadataQueue_.run(function(chunk, callback, cancelled) {
668 if (cancelled)
669 return callback();
hirono 2014/05/26 09:19:42 Maybe "callback(); return;" is more free from misr
yoshiki 2014/05/26 09:36:33 Done.
670
659 this.prefetchMetadata(chunk, function() { 671 this.prefetchMetadata(chunk, function() {
660 if (this.scanCancelled_) { 672 if (this.scanCancelled_) {
661 // Do nothing if the scanning is cancelled. 673 // Do nothing if the scanning is cancelled.
662 callback(); 674 callback();
663 return; 675 return;
664 } 676 }
665 677
666 cr.dispatchSimpleEvent(this, 'scan-updated'); 678 cr.dispatchSimpleEvent(this, 'scan-updated');
667 callback(); 679 callback();
668 }.bind(this)); 680 }.bind(this));
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 DirectoryContents.createForDriveMetadataSearch = function( 763 DirectoryContents.createForDriveMetadataSearch = function(
752 context, fakeDirectoryEntry, searchType) { 764 context, fakeDirectoryEntry, searchType) {
753 return new DirectoryContents( 765 return new DirectoryContents(
754 context, 766 context,
755 true, // Search 767 true, // Search
756 fakeDirectoryEntry, 768 fakeDirectoryEntry,
757 function() { 769 function() {
758 return new DriveMetadataSearchContentScanner(searchType); 770 return new DriveMetadataSearchContentScanner(searchType);
759 }); 771 });
760 }; 772 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698