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

Side by Side Diff: content/renderer/media/renderer_webmediaplayer_delegate.cc

Issue 2820643002: Decouple some graphics-related IsLowEndDevice() policies for 1GB devices. (Closed)
Patch Set: Rebase Created 3 years, 8 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "content/renderer/media/renderer_webmediaplayer_delegate.h" 5 #include "content/renderer/media/renderer_webmediaplayer_delegate.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
(...skipping 20 matching lines...) Expand all
31 namespace media { 31 namespace media {
32 32
33 RendererWebMediaPlayerDelegate::RendererWebMediaPlayerDelegate( 33 RendererWebMediaPlayerDelegate::RendererWebMediaPlayerDelegate(
34 content::RenderFrame* render_frame) 34 content::RenderFrame* render_frame)
35 : RenderFrameObserver(render_frame), 35 : RenderFrameObserver(render_frame),
36 default_tick_clock_(new base::DefaultTickClock()), 36 default_tick_clock_(new base::DefaultTickClock()),
37 tick_clock_(default_tick_clock_.get()) { 37 tick_clock_(default_tick_clock_.get()) {
38 idle_cleanup_interval_ = base::TimeDelta::FromSeconds(5); 38 idle_cleanup_interval_ = base::TimeDelta::FromSeconds(5);
39 idle_timeout_ = base::TimeDelta::FromSeconds(15); 39 idle_timeout_ = base::TimeDelta::FromSeconds(15);
40 40
41 // Idle players time out more aggressively on low end devices. 41 is_jelly_bean_ = false;
42 is_low_end_device_ = base::SysInfo::IsLowEndDevice();
43 42
44 #if defined(OS_ANDROID) 43 #if defined(OS_ANDROID)
45 // On Android, due to the instability of the OS level media components, we 44 // On Android, due to the instability of the OS level media components, we
46 // consider all pre-KitKat devices to be low end. 45 // consider all pre-KitKat devices to be potentially buggy.
47 is_low_end_device_ |= 46 is_jelly_bean_ |= base::android::BuildInfo::GetInstance()->sdk_int() <= 18;
48 base::android::BuildInfo::GetInstance()->sdk_int() <= 18;
49 #endif 47 #endif
50 } 48 }
51 49
52 RendererWebMediaPlayerDelegate::~RendererWebMediaPlayerDelegate() {} 50 RendererWebMediaPlayerDelegate::~RendererWebMediaPlayerDelegate() {}
53 51
54 bool RendererWebMediaPlayerDelegate::IsFrameHidden() { 52 bool RendererWebMediaPlayerDelegate::IsFrameHidden() {
55 if (is_frame_hidden_for_testing_) 53 if (is_frame_hidden_for_testing_)
56 return true; 54 return true;
57 55
58 return (render_frame() && render_frame()->IsHidden()) || is_frame_closed_; 56 return (render_frame() && render_frame()->IsHidden()) || is_frame_closed_;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_BecamePersistentVideo, 200 IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_BecamePersistentVideo,
203 OnMediaDelegateBecamePersistentVideo) 201 OnMediaDelegateBecamePersistentVideo)
204 IPC_MESSAGE_UNHANDLED(return false) 202 IPC_MESSAGE_UNHANDLED(return false)
205 IPC_END_MESSAGE_MAP() 203 IPC_END_MESSAGE_MAP()
206 return true; 204 return true;
207 } 205 }
208 206
209 void RendererWebMediaPlayerDelegate::SetIdleCleanupParamsForTesting( 207 void RendererWebMediaPlayerDelegate::SetIdleCleanupParamsForTesting(
210 base::TimeDelta idle_timeout, 208 base::TimeDelta idle_timeout,
211 base::TickClock* tick_clock, 209 base::TickClock* tick_clock,
212 bool is_low_end_device) { 210 bool is_jelly_bean) {
213 idle_cleanup_interval_ = base::TimeDelta(); 211 idle_cleanup_interval_ = base::TimeDelta();
214 idle_timeout_ = idle_timeout; 212 idle_timeout_ = idle_timeout;
215 tick_clock_ = tick_clock; 213 tick_clock_ = tick_clock;
216 is_low_end_device_ = is_low_end_device; 214 is_jelly_bean_ = is_jelly_bean;
217 } 215 }
218 216
219 bool RendererWebMediaPlayerDelegate::IsIdleCleanupTimerRunningForTesting() 217 bool RendererWebMediaPlayerDelegate::IsIdleCleanupTimerRunningForTesting()
220 const { 218 const {
221 return idle_cleanup_timer_.IsRunning(); 219 return idle_cleanup_timer_.IsRunning();
222 } 220 }
223 221
224 void RendererWebMediaPlayerDelegate::SetFrameHiddenForTesting(bool is_hidden) { 222 void RendererWebMediaPlayerDelegate::SetFrameHiddenForTesting(bool is_hidden) {
225 if (is_hidden == is_frame_hidden_for_testing_) 223 if (is_hidden == is_frame_hidden_for_testing_)
226 return; 224 return;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 302
305 // Record UMAs for background video playback. 303 // Record UMAs for background video playback.
306 RecordBackgroundVideoPlayback(); 304 RecordBackgroundVideoPlayback();
307 305
308 // Clean up idle players. 306 // Clean up idle players.
309 bool aggressive_cleanup = false; 307 bool aggressive_cleanup = false;
310 308
311 // When we reach the maximum number of idle players, clean them up 309 // When we reach the maximum number of idle players, clean them up
312 // aggressively. Values chosen after testing on a Galaxy Nexus device for 310 // aggressively. Values chosen after testing on a Galaxy Nexus device for
313 // http://crbug.com/612909. 311 // http://crbug.com/612909.
314 if (idle_player_map_.size() > (is_low_end_device_ ? 2u : 8u)) 312 if (idle_player_map_.size() > (is_jelly_bean_ ? 2u : 8u))
315 aggressive_cleanup = true; 313 aggressive_cleanup = true;
316 314
317 // When a player plays on a low-end device, clean up idle players 315 // When a player plays on a buggy old device, clean up idle players
318 // aggressively. 316 // aggressively.
319 if (has_played_video_since_last_update_task && is_low_end_device_) 317 if (has_played_video_since_last_update_task && is_jelly_bean_)
320 aggressive_cleanup = true; 318 aggressive_cleanup = true;
321 319
322 CleanUpIdlePlayers(aggressive_cleanup ? base::TimeDelta() : idle_timeout_); 320 CleanUpIdlePlayers(aggressive_cleanup ? base::TimeDelta() : idle_timeout_);
323 321
324 // If there are still idle players, schedule an attempt to clean them up. 322 // If there are still idle players, schedule an attempt to clean them up.
325 // This construct ensures that the next callback is always 323 // This construct ensures that the next callback is always
326 // |idle_cleanup_interval_| from now. 324 // |idle_cleanup_interval_| from now.
327 idle_cleanup_timer_.Stop(); 325 idle_cleanup_timer_.Stop();
328 if (!idle_player_map_.empty()) { 326 if (!idle_player_map_.empty()) {
329 idle_cleanup_timer_.Start( 327 idle_cleanup_timer_.Start(
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 player->OnIdleTimeout(); 376 player->OnIdleTimeout();
379 } 377 }
380 } 378 }
381 } 379 }
382 380
383 void RendererWebMediaPlayerDelegate::OnDestruct() { 381 void RendererWebMediaPlayerDelegate::OnDestruct() {
384 delete this; 382 delete this;
385 } 383 }
386 384
387 } // namespace media 385 } // namespace media
OLDNEW
« no previous file with comments | « content/renderer/media/renderer_webmediaplayer_delegate.h ('k') | content/renderer/render_view_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698