Author: labath Date: Tue Oct 20 05:33:17 2015 New Revision: 250814 URL: http://llvm.org/viewvc/llvm-project?rev=250814&view=rev Log: Increase default memory cache line size for android
Summary: ADB packets have a maximum size of 4k. This means the size of memory reads does not affect speed too much (as long as it fits in one packet). Therefore, I am increasing the default memory read size for android to 2k. This value is used only if the user has not modified the default memory-cache-line-size setting. Reviewers: clayborg, tberghammer Subscribers: tberghammer, danalbert, srhines, lldb-commits Differential Revision: http://reviews.llvm.org/D13812 Added: lldb/trunk/test/android/ lldb/trunk/test/android/platform/ lldb/trunk/test/android/platform/Makefile lldb/trunk/test/android/platform/TestDefaultCacheLineSize.py lldb/trunk/test/android/platform/main.cpp Modified: lldb/trunk/include/lldb/Target/Platform.h lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h lldb/trunk/source/Target/Process.cpp Modified: lldb/trunk/include/lldb/Target/Platform.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Platform.h?rev=250814&r1=250813&r2=250814&view=diff ============================================================================== --- lldb/trunk/include/lldb/Target/Platform.h (original) +++ lldb/trunk/include/lldb/Target/Platform.h Tue Oct 20 05:33:17 2015 @@ -947,7 +947,6 @@ class ModuleCache; virtual const std::vector<ConstString> & GetTrapHandlerSymbolNames (); - //------------------------------------------------------------------ /// Find a support executable that may not live within in the /// standard locations related to LLDB. @@ -970,6 +969,14 @@ class ModuleCache; return FileSpec(); } + //------------------------------------------------------------------ + /// Allow the platform to set preferred memory cache line size. If non-zero (and the user + /// has not set cache line size explicitly), this value will be used as the cache line + /// size for memory reads. + //------------------------------------------------------------------ + virtual uint32_t + GetDefaultMemoryCacheLineSize() { return 0; } + protected: bool m_is_host; // Set to true when we are able to actually set the OS version while Modified: lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp?rev=250814&r1=250813&r2=250814&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp (original) +++ lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp Tue Oct 20 05:33:17 2015 @@ -28,6 +28,7 @@ using namespace lldb_private; using namespace lldb_private::platform_android; static uint32_t g_initialize_count = 0; +static const unsigned int g_android_default_cache_size = 2048; // Fits inside 4k adb packet. void PlatformAndroid::Initialize () @@ -275,6 +276,12 @@ PlatformAndroid::DisconnectRemote() } uint32_t +PlatformAndroid::GetDefaultMemoryCacheLineSize() +{ + return g_android_default_cache_size; +} + +uint32_t PlatformAndroid::GetSdkVersion() { if (!IsConnected()) Modified: lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h?rev=250814&r1=250813&r2=250814&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h (original) +++ lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h Tue Oct 20 05:33:17 2015 @@ -83,6 +83,9 @@ namespace platform_android { Error DisconnectRemote () override; + uint32_t + GetDefaultMemoryCacheLineSize() override; + protected: const char * GetCacheHostname () override; Modified: lldb/trunk/source/Target/Process.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Process.cpp?rev=250814&r1=250813&r2=250814&view=diff ============================================================================== --- lldb/trunk/source/Target/Process.cpp (original) +++ lldb/trunk/source/Target/Process.cpp Tue Oct 20 05:33:17 2015 @@ -813,6 +813,13 @@ Process::Process(lldb::TargetSP target_s eBroadcastInternalStateControlResume); // We need something valid here, even if just the default UnixSignalsSP. assert (m_unix_signals_sp && "null m_unix_signals_sp after initialization"); + + // Allow the platform to override the default cache line size + OptionValueSP value_sp = + m_collection_sp->GetPropertyAtIndex(nullptr, true, ePropertyMemCacheLineSize)->GetValue(); + uint32_t platform_cache_line_size = target_sp->GetPlatform()->GetDefaultMemoryCacheLineSize(); + if (! value_sp->OptionWasSet() && platform_cache_line_size != 0) + value_sp->SetUInt64Value(platform_cache_line_size); } //---------------------------------------------------------------------- Added: lldb/trunk/test/android/platform/Makefile URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/android/platform/Makefile?rev=250814&view=auto ============================================================================== --- lldb/trunk/test/android/platform/Makefile (added) +++ lldb/trunk/test/android/platform/Makefile Tue Oct 20 05:33:17 2015 @@ -0,0 +1,4 @@ +LEVEL = ../../make + +CXX_SOURCES := main.cpp +include $(LEVEL)/Makefile.rules Added: lldb/trunk/test/android/platform/TestDefaultCacheLineSize.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/android/platform/TestDefaultCacheLineSize.py?rev=250814&view=auto ============================================================================== --- lldb/trunk/test/android/platform/TestDefaultCacheLineSize.py (added) +++ lldb/trunk/test/android/platform/TestDefaultCacheLineSize.py Tue Oct 20 05:33:17 2015 @@ -0,0 +1,41 @@ +""" +Verify the default cache line size for android targets +""" + +import os +import unittest2 +import lldb +from lldbtest import * +import lldbutil + +class DefaultCacheLineSizeTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @skipUnlessPlatform(['android']) + def test_cache_line_size(self): + self.build(dictionary=self.getBuildFlags()) + exe = os.path.join(os.getcwd(), "a.out") + target = self.dbg.CreateTarget(exe) + self.assertTrue(target and target.IsValid(), "Target is valid") + + breakpoint = target.BreakpointCreateByName("main") + self.assertTrue(breakpoint and breakpoint.IsValid(), "Breakpoint is valid") + + # Run the program. + process = target.LaunchSimple(None, None, self.get_process_working_directory()) + self.assertTrue(process and process.IsValid(), PROCESS_IS_VALID) + self.assertEqual(process.GetState(), lldb.eStateStopped, PROCESS_STOPPED) + + # check the setting value + self.expect("settings show target.process.memory-cache-line-size", patterns=[" = 2048"]) + + # Run to completion. + process.Continue() + self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED) + +if __name__ == '__main__': + import atexit + lldb.SBDebugger.Initialize() + atexit.register(lambda: lldb.SBDebugger.Terminate()) + unittest2.main() Added: lldb/trunk/test/android/platform/main.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/android/platform/main.cpp?rev=250814&view=auto ============================================================================== --- lldb/trunk/test/android/platform/main.cpp (added) +++ lldb/trunk/test/android/platform/main.cpp Tue Oct 20 05:33:17 2015 @@ -0,0 +1,13 @@ +//===-- main.cpp ------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main () +{ + return 0; +} _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits