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