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

Side by Side Diff: ppapi/native_client/src/trusted/plugin/plugin.cc

Issue 8548018: Make the rate limiting of Native Client Plugin progress events more robust. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month 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
« no previous file with comments | « ppapi/native_client/src/trusted/plugin/plugin.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #ifdef _MSC_VER 5 #ifdef _MSC_VER
6 // Do not warn about use of std::copy with raw pointers. 6 // Do not warn about use of std::copy with raw pointers.
7 #pragma warning(disable : 4996) 7 #pragma warning(disable : 4996)
8 #endif 8 #endif
9 9
10 #include "native_client/src/trusted/plugin/plugin.h" 10 #include "native_client/src/trusted/plugin/plugin.h"
(...skipping 967 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 nexe_error_reported_(false), 978 nexe_error_reported_(false),
979 wrapper_factory_(NULL), 979 wrapper_factory_(NULL),
980 last_error_string_(""), 980 last_error_string_(""),
981 ppapi_proxy_(NULL), 981 ppapi_proxy_(NULL),
982 enable_dev_interfaces_(false), 982 enable_dev_interfaces_(false),
983 replayDidChangeView(false), 983 replayDidChangeView(false),
984 replayHandleDocumentLoad(false), 984 replayHandleDocumentLoad(false),
985 init_time_(0), 985 init_time_(0),
986 ready_time_(0), 986 ready_time_(0),
987 nexe_size_(0), 987 nexe_size_(0),
988 last_event_bytes_received_(0) { 988 time_of_last_progress_event_(0) {
989 PLUGIN_PRINTF(("Plugin::Plugin (this=%p, pp_instance=%" 989 PLUGIN_PRINTF(("Plugin::Plugin (this=%p, pp_instance=%"
990 NACL_PRId32")\n", static_cast<void*>(this), pp_instance)); 990 NACL_PRId32")\n", static_cast<void*>(this), pp_instance));
991 NaClSrpcModuleInit(); 991 NaClSrpcModuleInit();
992 nexe_downloader_.Initialize(this); 992 nexe_downloader_.Initialize(this);
993 pnacl_.Initialize(this); 993 pnacl_.Initialize(this);
994 callback_factory_.Initialize(this); 994 callback_factory_.Initialize(this);
995 } 995 }
996 996
997 997
998 Plugin::~Plugin() { 998 Plugin::~Plugin() {
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
1836 void Plugin::UpdateDownloadProgress( 1836 void Plugin::UpdateDownloadProgress(
1837 PP_Instance pp_instance, 1837 PP_Instance pp_instance,
1838 PP_Resource pp_resource, 1838 PP_Resource pp_resource,
1839 int64_t /*bytes_sent*/, 1839 int64_t /*bytes_sent*/,
1840 int64_t /*total_bytes_to_be_sent*/, 1840 int64_t /*total_bytes_to_be_sent*/,
1841 int64_t bytes_received, 1841 int64_t bytes_received,
1842 int64_t total_bytes_to_be_received) { 1842 int64_t total_bytes_to_be_received) {
1843 Instance* instance = pp::Module::Get()->InstanceForPPInstance(pp_instance); 1843 Instance* instance = pp::Module::Get()->InstanceForPPInstance(pp_instance);
1844 if (instance != NULL) { 1844 if (instance != NULL) {
1845 Plugin* plugin = static_cast<Plugin*>(instance); 1845 Plugin* plugin = static_cast<Plugin*>(instance);
1846 int64_t progress = bytes_received - plugin->last_event_bytes_received_; 1846 // Rate limit progress events to a maximum of 100 per second.
1847 const int64_t kProgressThreshold = 1 << 17; // 128K bytes per event 1847 int64_t time = NaClGetTimeOfDayMicroseconds();
1848 if (progress > kProgressThreshold) { 1848 int64_t elapsed = time - plugin->time_of_last_progress_event_;
1849 const int64_t kTenMilliseconds = 10000;
polina 2011/11/23 08:23:59 perhaps put this at the top of the file?
bbudge 2011/11/23 14:09:37 Since it's only used once, I kind of like it right
1850 if (elapsed > kTenMilliseconds) {
1851 plugin->time_of_last_progress_event_ = time;
1852
1853 // Find the URL loader that sent this notification.
1854 const FileDownloader* file_downloader =
1855 plugin->FindFileDownloader(pp_resource);
1856 // If not a streamed file, it must be the .nexe loader.
1857 if (file_downloader == NULL)
1858 file_downloader = &plugin->nexe_downloader_;
1859 nacl::string url = file_downloader->url_to_open();
1849 LengthComputable length_computable = (total_bytes_to_be_received >= 0) ? 1860 LengthComputable length_computable = (total_bytes_to_be_received >= 0) ?
1850 LENGTH_IS_COMPUTABLE : LENGTH_IS_NOT_COMPUTABLE; 1861 LENGTH_IS_COMPUTABLE : LENGTH_IS_NOT_COMPUTABLE;
1851 // Get the URL for the URL loader that sent this notification.
1852 const FileDownloader* file_downloader =
1853 plugin->FindFileDownloader(pp_resource);
1854 nacl::string url = (file_downloader != NULL) ?
1855 file_downloader->url_to_open() : NACL_NO_URL;
1856 1862
1857 plugin->EnqueueProgressEvent(kProgressEventProgress, 1863 plugin->EnqueueProgressEvent(kProgressEventProgress,
1858 url, 1864 url,
1859 length_computable, 1865 length_computable,
1860 bytes_received, 1866 bytes_received,
1861 total_bytes_to_be_received); 1867 total_bytes_to_be_received);
polina 2011/11/23 08:23:59 do the users know that they only get some of these
bbudge 2011/11/23 14:09:37 They will always get a 'loadend' event with the re
1862 plugin->last_event_bytes_received_ = bytes_received;
1863 } 1868 }
1864 } 1869 }
1865 } 1870 }
1866 1871
1867 const FileDownloader* Plugin::FindFileDownloader( 1872 const FileDownloader* Plugin::FindFileDownloader(
1868 PP_Resource url_loader) const { 1873 PP_Resource url_loader) const {
1869 const FileDownloader* file_downloader = NULL; 1874 const FileDownloader* file_downloader = NULL;
1870 if (url_loader == nexe_downloader_.url_loader()) { 1875 if (url_loader == nexe_downloader_.url_loader()) {
1871 file_downloader = &nexe_downloader_; 1876 file_downloader = &nexe_downloader_;
1872 } else { 1877 } else {
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
2014 std::string scheme = canonicalized.AsString().substr(comps.scheme.begin, 2019 std::string scheme = canonicalized.AsString().substr(comps.scheme.begin,
2015 comps.scheme.len); 2020 comps.scheme.len);
2016 if (scheme == kChromeExtensionUriScheme) 2021 if (scheme == kChromeExtensionUriScheme)
2017 return SCHEME_CHROME_EXTENSION; 2022 return SCHEME_CHROME_EXTENSION;
2018 if (scheme == kDataUriScheme) 2023 if (scheme == kDataUriScheme)
2019 return SCHEME_DATA; 2024 return SCHEME_DATA;
2020 return SCHEME_OTHER; 2025 return SCHEME_OTHER;
2021 } 2026 }
2022 2027
2023 } // namespace plugin 2028 } // namespace plugin
OLDNEW
« no previous file with comments | « ppapi/native_client/src/trusted/plugin/plugin.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698