const char kEnableOffscreenRendering[] = "enable-offscreen-rendering";
#endif
+#if BUILDFLAG(IS_TIZEN)
+const char kDiscardableMemoryLimit[] = "discardable-memory-limit";
+const char kDiscardableMemoryPurgeDelay[] = "discardable-memory-purge-delay";
+#endif
+
#if BUILDFLAG(IS_POSIX)
// Used for turning on Breakpad crash reporting in a debug environment where
// crash reporting is typically compiled but disabled.
extern const char kEnableOffscreenRendering[];
#endif
+#if BUILDFLAG(IS_TIZEN)
+extern const char kDiscardableMemoryLimit[];
+extern const char kDiscardableMemoryPurgeDelay[];
+#endif
+
#if BUILDFLAG(IS_POSIX)
extern const char kEnableCrashReporterForTesting[];
#endif
#include "base/metrics/histogram_macros.h"
#endif
+#if BUILDFLAG(IS_TIZEN)
+#include "base/base_switches.h"
+#endif
+
namespace discardable_memory {
namespace {
DCHECK(!g_instance)
<< "A DiscardableSharedMemoryManager already exists in this process.";
g_instance = this;
+
+#if BUILDFLAG(IS_TIZEN)
+ std::string switch_value =
+ base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+ switches::kDiscardableMemoryLimit);
+ size_t discardable_mem_limit;
+ if (base::StringToSizeT(switch_value, &discardable_mem_limit))
+ memory_limit_ = discardable_mem_limit * 1024 * 1024;
+
+ std::string delay_value =
+ base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+ switches::kDiscardableMemoryPurgeDelay);
+ int discardable_mem_purge_delay;
+ if (base::StringToInt(delay_value, &discardable_mem_purge_delay))
+ purge_delay_ = base::Milliseconds(discardable_mem_purge_delay);
+
+ LOG(INFO) << "DiscardableMemoryLimit : " << memory_limit_ / 1024 << "KB";
+ LOG(INFO) << "DiscardableMemoryPurgeDelay : " << purge_delay_;
+#endif
+
DCHECK_NE(memory_limit_, 0u);
enforce_memory_policy_callback_ =
base::BindRepeating(&DiscardableSharedMemoryManager::EnforceMemoryPolicy,
break;
// Stop eviction attempts when the LRU segment is currently in use.
+#if BUILDFLAG(IS_TIZEN)
+ if (segments_.front()->memory()->last_known_usage() + purge_delay_ >=
+ current_time)
+#else
if (segments_.front()->memory()->last_known_usage() >= current_time)
+#endif
break;
std::pop_heap(segments_.begin(), segments_.end(), CompareMemoryUsageTime);
base::WeakPtrFactory<DiscardableSharedMemoryManager> weak_ptr_factory_{this};
+#if BUILDFLAG(IS_TIZEN)
+ base::TimeDelta purge_delay_;
+#endif
+
// WeakPtrFractory for generating weak pointers used in the mojo thread.
base::WeakPtrFactory<DiscardableSharedMemoryManager>
mojo_thread_weak_ptr_factory_{this};
#endif
#if BUILDFLAG(IS_EFL)
autofill::switches::kDisableAutofill,
+#endif
+#if BUILDFLAG(IS_TIZEN)
+ switches::kDiscardableMemoryLimit,
+ switches::kDiscardableMemoryPurgeDelay,
#endif
};
renderer_cmd->CopySwitchesFrom(browser_cmd, kSwitchNames,
#endif
#if BUILDFLAG(IS_TIZEN)
-#if !defined(EWK_BRINGUP) // FIXME:m85 bringup
+ // For optimizing discardable memory. [limit:MB, delay:ms]
+ if (!p_command_line->HasSwitch(switches::kDiscardableMemoryLimit))
+ p_command_line->AppendSwitchASCII(switches::kDiscardableMemoryLimit, "20");
+
+ if (!p_command_line->HasSwitch(switches::kDiscardableMemoryPurgeDelay)) {
+ p_command_line->AppendSwitchASCII(switches::kDiscardableMemoryPurgeDelay,
+ "500");
+ }
+#if !defined(EWK_BRINGUP)
p_command_line->AppendSwitchASCII(
switches::kAcceleratedCanvas2dMSAASampleCount, "4");
p_command_line->AppendSwitch(switches::kEnableGestureTapHighlight);