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

Unified Diff: runtime/bin/directory_win.cc

Issue 9310082: Run all directory async operations on a separate thread using native ports (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Adderssed review comments from ager@ (and rebased) Created 8 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
« no previous file with comments | « runtime/bin/directory_posix.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/directory_win.cc
diff --git a/runtime/bin/directory_win.cc b/runtime/bin/directory_win.cc
index 7547c8da65838f911943d83d81c5227c7b83d4f7..6202aaf5d98b7a498b5e8ec2726adebdec3bd471 100644
--- a/runtime/bin/directory_win.cc
+++ b/runtime/bin/directory_win.cc
@@ -35,10 +35,7 @@ static int SetOsErrorMessage(char* os_error_message,
// Forward declaration.
static bool ListRecursively(const char* dir_name,
bool recursive,
- Dart_Port dir_port,
- Dart_Port file_port,
- Dart_Port done_port,
- Dart_Port error_port);
+ DirectoryListing* listing);
static bool DeleteRecursively(const char* dir_name);
@@ -46,10 +43,7 @@ static bool HandleDir(char* dir_name,
char* path,
int path_length,
bool recursive,
- Dart_Port dir_port,
- Dart_Port file_port,
- Dart_Port done_port,
- Dart_Port error_port) {
+ DirectoryListing* listing) {
if (strcmp(dir_name, ".") != 0 &&
strcmp(dir_name, "..") != 0) {
size_t written = snprintf(path + path_length,
@@ -59,17 +53,10 @@ static bool HandleDir(char* dir_name,
if (written != strlen(dir_name)) {
return false;
}
- if (dir_port != 0) {
- Dart_Handle name = Dart_NewString(path);
- Dart_Post(dir_port, name);
- }
+ bool ok = listing->HandleDirectory(dir_name);
+ if (!ok) return ok;
if (recursive) {
- return ListRecursively(path,
- recursive,
- dir_port,
- file_port,
- done_port,
- error_port);
+ return ListRecursively(path, recursive, listing);
}
}
return true;
@@ -79,19 +66,15 @@ static bool HandleDir(char* dir_name,
static bool HandleFile(char* file_name,
char* path,
int path_length,
- Dart_Port file_port) {
- if (file_port != 0) {
- size_t written = snprintf(path + path_length,
- MAX_PATH - path_length,
- "%s",
- file_name);
- if (written != strlen(file_name)) {
- return false;
- };
- Dart_Handle name = Dart_NewString(path);
- Dart_Post(file_port, name);
- }
- return true;
+ DirectoryListing* listing) {
+ size_t written = snprintf(path + path_length,
+ MAX_PATH - path_length,
+ "%s",
+ file_name);
+ if (written != strlen(file_name)) {
+ return false;
+ };
+ return listing->HandleFile(file_name);
}
@@ -99,22 +82,16 @@ static bool HandleEntry(LPWIN32_FIND_DATA find_file_data,
char* path,
int path_length,
bool recursive,
- Dart_Port dir_port,
- Dart_Port file_port,
- Dart_Port done_port,
- Dart_Port error_port) {
+ DirectoryListing* listing) {
DWORD attributes = find_file_data->dwFileAttributes;
if ((attributes & FILE_ATTRIBUTE_DIRECTORY) != 0) {
return HandleDir(find_file_data->cFileName,
path,
path_length,
recursive,
- dir_port,
- file_port,
- done_port,
- error_port);
+ listing);
} else {
- return HandleFile(find_file_data->cFileName, path, path_length, file_port);
+ return HandleFile(find_file_data->cFileName, path, path_length, listing);
}
}
@@ -146,34 +123,29 @@ static bool ComputeFullSearchPath(const char* dir_name,
return true;
}
-static void PostError(Dart_Port error_port,
+static void PostError(DirectoryListing* listing,
const char* prefix,
const char* suffix) {
- if (error_port != 0) {
- char* error_str = Platform::StrError(GetLastError());
- int error_message_size =
- strlen(prefix) + strlen(suffix) + strlen(error_str) + 3;
- char* message = static_cast<char*>(malloc(error_message_size + 1));
- size_t written = snprintf(message,
- error_message_size + 1,
- "%s%s (%s)",
- prefix,
- suffix,
- error_str);
- ASSERT(written == error_message_size);
- free(error_str);
- Dart_Post(error_port, Dart_NewString(message));
- free(message);
- }
+ char* error_str = Platform::StrError(GetLastError());
+ int error_message_size =
+ strlen(prefix) + strlen(suffix) + strlen(error_str) + 3;
+ char* message = static_cast<char*>(malloc(error_message_size + 1));
+ size_t written = snprintf(message,
+ error_message_size + 1,
+ "%s%s (%s)",
+ prefix,
+ suffix,
+ error_str);
+ ASSERT(written == error_message_size);
+ free(error_str);
+ listing->HandleError(message);
+ free(message);
}
static bool ListRecursively(const char* dir_name,
bool recursive,
- Dart_Port dir_port,
- Dart_Port file_port,
- Dart_Port done_port,
- Dart_Port error_port) {
+ DirectoryListing* listing) {
// Compute full path for the directory currently being listed. The
// path buffer will be used to construct the current path in the
// recursive traversal. path_length does not always equal
@@ -183,7 +155,7 @@ static bool ListRecursively(const char* dir_name,
int path_length = 0;
bool valid = ComputeFullSearchPath(dir_name, path, &path_length);
if (!valid) {
- PostError(error_port, "Directory listing failed for: ", dir_name);
+ PostError(listing, "Directory listing failed for: ", dir_name);
free(path);
return false;
}
@@ -196,7 +168,7 @@ static bool ListRecursively(const char* dir_name,
path[path_length] = '\0';
if (find_handle == INVALID_HANDLE_VALUE) {
- PostError(error_port, "Directory listing failed for: ", path);
+ PostError(listing, "Directory listing failed for: ", path);
free(path);
return false;
}
@@ -205,29 +177,23 @@ static bool ListRecursively(const char* dir_name,
path,
path_length,
recursive,
- dir_port,
- file_port,
- done_port,
- error_port);
+ listing);
while ((FindNextFile(find_handle, &find_file_data) != 0) && success) {
success = success && HandleEntry(&find_file_data,
path,
path_length,
recursive,
- dir_port,
- file_port,
- done_port,
- error_port);
+ listing);
}
if (GetLastError() != ERROR_NO_MORE_FILES) {
success = false;
- PostError(error_port, "Directory listing failed", "");
+ PostError(listing, "Directory listing failed", "");
}
if (FindClose(find_handle) == 0) {
- PostError(error_port, "Failed to close directory", "");
+ PostError(listing, "Failed to close directory", "");
}
free(path);
@@ -323,22 +289,11 @@ static bool DeleteRecursively(const char* dir_name) {
}
-void Directory::List(const char* dir_name,
+bool Directory::List(const char* dir_name,
bool recursive,
- Dart_Port dir_port,
- Dart_Port file_port,
- Dart_Port done_port,
- Dart_Port error_port) {
- bool result = ListRecursively(dir_name,
- recursive,
- dir_port,
- file_port,
- done_port,
- error_port);
- if (done_port != 0) {
- Dart_Handle value = Dart_NewBoolean(result);
- Dart_Post(done_port, value);
- }
+ DirectoryListing* listing) {
+ bool completed = ListRecursively(dir_name, recursive, listing);
+ return completed;
}
« no previous file with comments | « runtime/bin/directory_posix.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698