1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "media/base/demuxer_memory_limit.h"
6 
7 #include "base/android/build_info.h"
8 #include "base/system/sys_info.h"
9 
10 namespace media {
11 
12 namespace {
13 
SelectLimit(size_t default_limit,size_t low_limit,size_t very_low_limit)14 size_t SelectLimit(size_t default_limit,
15                    size_t low_limit,
16                    size_t very_low_limit) {
17   if (!base::SysInfo::IsLowEndDevice()) {
18     return default_limit;
19   }
20   // Use very low limit on 512MiB Android Go devices only.
21   if (base::android::BuildInfo::GetInstance()->sdk_int() >=
22           base::android::SDK_VERSION_OREO &&
23       base::SysInfo::AmountOfPhysicalMemoryMB() <= 512) {
24     return very_low_limit;
25   }
26   return low_limit;
27 }
28 
29 }  // namespace
30 
GetDemuxerStreamAudioMemoryLimit(const AudioDecoderConfig *)31 size_t GetDemuxerStreamAudioMemoryLimit(
32     const AudioDecoderConfig* /*audio_config*/) {
33   static const size_t limit =
34       SelectLimit(internal::kDemuxerStreamAudioMemoryLimitDefault,
35                   internal::kDemuxerStreamAudioMemoryLimitLow,
36                   internal::kDemuxerStreamAudioMemoryLimitVeryLow);
37   return limit;
38 }
39 
GetDemuxerStreamVideoMemoryLimit(Demuxer::DemuxerTypes,const VideoDecoderConfig *)40 size_t GetDemuxerStreamVideoMemoryLimit(
41     Demuxer::DemuxerTypes /*demuxer_type*/,
42     const VideoDecoderConfig* /*video_config*/) {
43   static const size_t limit =
44       SelectLimit(internal::kDemuxerStreamVideoMemoryLimitDefault,
45                   internal::kDemuxerStreamVideoMemoryLimitLow,
46                   internal::kDemuxerStreamVideoMemoryLimitVeryLow);
47   return limit;
48 }
49 
GetDemuxerMemoryLimit(Demuxer::DemuxerTypes demuxer_type)50 size_t GetDemuxerMemoryLimit(Demuxer::DemuxerTypes demuxer_type) {
51   return GetDemuxerStreamAudioMemoryLimit(nullptr) +
52          GetDemuxerStreamVideoMemoryLimit(demuxer_type, nullptr);
53 }
54 
55 }  // namespace media
56