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

Unified Diff: chrome/browser/media_galleries/linux/mtp_device_delegate_impl_linux.cc

Issue 180783005: MTP Streaming: Optimize block reading (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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: chrome/browser/media_galleries/linux/mtp_device_delegate_impl_linux.cc
diff --git a/chrome/browser/media_galleries/linux/mtp_device_delegate_impl_linux.cc b/chrome/browser/media_galleries/linux/mtp_device_delegate_impl_linux.cc
index 50f6291400d111d00acb186aba83813b121fb75e..158f75f553bad333c60f7d2fda95781c9d2c4ee8 100644
--- a/chrome/browser/media_galleries/linux/mtp_device_delegate_impl_linux.cc
+++ b/chrome/browser/media_galleries/linux/mtp_device_delegate_impl_linux.cc
@@ -4,8 +4,11 @@
#include "chrome/browser/media_galleries/linux/mtp_device_delegate_impl_linux.h"
+#include <algorithm>
+
#include "base/bind.h"
#include "base/files/file_path.h"
+#include "base/numerics/safe_conversions.h"
#include "base/strings/string_util.h"
#include "chrome/browser/media_galleries/linux/mtp_device_task_helper.h"
#include "chrome/browser/media_galleries/linux/mtp_device_task_helper_map_service.h"
@@ -292,17 +295,17 @@ void MTPDeviceDelegateImplLinux::ReadBytes(
DCHECK(!device_file_path.empty());
std::string device_file_relative_path =
GetDeviceRelativePath(device_path_, device_file_path);
- ReadBytesRequest request(device_file_relative_path, buf, offset, buf_len,
- success_callback, error_callback);
+
+ ReadBytesRequest request(
+ device_file_relative_path, buf, offset, buf_len,
+ base::Bind(&MTPDeviceDelegateImplLinux::OnDidReadBytes,
+ weak_ptr_factory_.GetWeakPtr(), success_callback),
+ base::Bind(&MTPDeviceDelegateImplLinux::HandleDeviceFileError,
+ weak_ptr_factory_.GetWeakPtr(), error_callback));
+
base::Closure call_closure =
- base::Bind(
- &GetFileInfoOnUIThread,
- storage_name_,
- device_file_relative_path,
- base::Bind(&MTPDeviceDelegateImplLinux::OnDidGetFileInfoToReadBytes,
- weak_ptr_factory_.GetWeakPtr(), request),
- base::Bind(&MTPDeviceDelegateImplLinux::HandleDeviceFileError,
- weak_ptr_factory_.GetWeakPtr(), error_callback));
+ base::Bind(base::Bind(&ReadBytesOnUIThread, storage_name_, request));
+
EnsureInitAndRunTask(PendingTaskInfo(FROM_HERE, call_closure));
}
@@ -452,38 +455,6 @@ void MTPDeviceDelegateImplLinux::OnDidGetFileInfoToCreateSnapshotFile(
WriteDataIntoSnapshotFile(snapshot_file_info);
}
-void MTPDeviceDelegateImplLinux::OnDidGetFileInfoToReadBytes(
- const ReadBytesRequest& request,
- const base::File::Info& file_info) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
- DCHECK(request.buf);
- DCHECK(request.buf_len >= 0);
- DCHECK(task_in_progress_);
- base::File::Error error = base::File::FILE_OK;
- if (file_info.is_directory)
- error = base::File::FILE_ERROR_NOT_A_FILE;
- else if (file_info.size < 0 || file_info.size > kuint32max)
- error = base::File::FILE_ERROR_FAILED;
-
- if (error != base::File::FILE_OK)
- return HandleDeviceFileError(request.error_callback, error);
-
- ReadBytesRequest new_request(
- request.device_file_relative_path,
- request.buf,
- request.offset,
- request.buf_len,
- base::Bind(&MTPDeviceDelegateImplLinux::OnDidReadBytes,
- weak_ptr_factory_.GetWeakPtr(), request.success_callback),
- base::Bind(&MTPDeviceDelegateImplLinux::HandleDeviceFileError,
- weak_ptr_factory_.GetWeakPtr(), request.error_callback));
-
- content::BrowserThread::PostTask(
- content::BrowserThread::UI,
- FROM_HERE,
- base::Bind(&ReadBytesOnUIThread, storage_name_, new_request));
-}
-
void MTPDeviceDelegateImplLinux::OnDidReadDirectory(
const ReadDirectorySuccessCallback& success_callback,
const fileapi::AsyncFileUtil::EntryList& file_list) {
@@ -519,10 +490,10 @@ void MTPDeviceDelegateImplLinux::OnWriteDataIntoSnapshotFileError(
void MTPDeviceDelegateImplLinux::OnDidReadBytes(
const ReadBytesSuccessCallback& success_callback,
- int bytes_read) {
+ const base::File::Info& file_info, int bytes_read) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
DCHECK(task_in_progress_);
- success_callback.Run(bytes_read);
+ success_callback.Run(file_info, bytes_read);
task_in_progress_ = false;
ProcessNextPendingRequest();
}

Powered by Google App Engine
This is Rietveld 408576698