summary refs log tree commit diff stats
path: root/test/bm_loader.py
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2010-05-14 17:27:04 +0200
committerhut <hut@lavabit.com>2010-05-14 17:27:04 +0200
commit420d3d1af8d2991ae6a8cbe061adaab878c4b3ff (patch)
treead1cdc33cc12984c141618439b646424d8a76c25 /test/bm_loader.py
parent792d6b23711c428a4a2b98537f44e2fbaed97fdd (diff)
parent2f3326a41430364cb34a227d311691cada605327 (diff)
downloadranger-420d3d1af8d2991ae6a8cbe061adaab878c4b3ff.tar.gz
Merge branch 'master' into cp
Conflicts:
	ranger/__main__.py
Diffstat (limited to 'test/bm_loader.py')
-rw-r--r--test/bm_loader.py167
1 files changed, 167 insertions, 0 deletions
diff --git a/test/bm_loader.py b/test/bm_loader.py
new file mode 100644
index 00000000..4bfc2db9
--- /dev/null
+++ b/test/bm_loader.py
@@ -0,0 +1,167 @@
+# Copyright (C) 2009, 2010  Roman Zimbelmann <romanz@lavabit.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+from ranger.core.loader import Loader
+from ranger.fsobject import Directory, File
+from ranger.ext.openstruct import OpenStruct
+import os.path
+from ranger.shared import FileManagerAware, SettingsAware
+from test import Fake
+from os.path import realpath, join, dirname
+from subprocess import Popen, PIPE
+TESTDIR = realpath(join(dirname(__file__), '/usr/include'))
+
+def skip(x):
+	return
+
+def raw_load_content(self):
+	"""
+	The method which is used in a Directory object to load stuff.
+	Keep this up to date!
+	"""
+
+	from os.path import join, isdir, basename
+	from os import listdir
+	import ranger.ext.mount_path
+
+	self.loading = True
+	self.load_if_outdated()
+
+	try:
+		if self.exists and self.runnable:
+			# 0.003s:
+			self.mount_path = ranger.ext.mount_path.mount_path(self.path)
+
+			# 0.1s:
+			filenames = []
+			for fname in listdir(self.path):
+				if not self.settings.show_hidden:
+					hfilter = self.settings.hidden_filter
+					if hfilter:
+						if isinstance(hfilter, str) and hfilter in fname:
+							continue
+						if hasattr(hfilter, 'search') and \
+							hfilter.search(fname):
+							continue
+				if isinstance(self.filter, str) and self.filter \
+						and self.filter not in fname:
+					continue
+				filenames.append(join(self.path, fname))
+			# ---
+
+			self.load_content_mtime = os.stat(self.path).st_mtime
+
+			marked_paths = [obj.path for obj in self.marked_items]
+
+			# 2.85s:
+			files = []
+			for name in filenames:
+				if isdir(name):
+					try:
+						item = self.fm.env.get_directory(name)
+					except:
+						item = Directory(name)
+				else:
+					item = File(name)
+				item.load_if_outdated()
+				files.append(item)
+
+			# 0.2s
+			self.disk_usage = sum(f.size for f in files if f.is_file)
+
+			self.scroll_offset = 0
+			self.filenames = filenames
+			self.files = files
+
+			self._clear_marked_items()
+			for item in self.files:
+				if item.path in marked_paths:
+					self.mark_item(item, True)
+				else:
+					self.mark_item(item, False)
+
+			self.sort()
+
+			if len(self.files) > 0:
+				if self.pointed_obj is not None:
+					self.sync_index()
+				else:
+					self.move(to=0)
+		else:
+			self.filenames = None
+			self.files = None
+
+		self.cycle_list = None
+		self.content_loaded = True
+		self.determine_infostring()
+		self.correct_pointer()
+
+	finally:
+		self.loading = False
+
+
+class benchmark_load(object):
+	def __init__(self):
+		self.loader = Loader()
+		fm = OpenStruct(loader=self.loader)
+		SettingsAware.settings = Fake()
+		FileManagerAware.fm = fm
+		self.dir = Directory(TESTDIR)
+
+	def bm_run(self, n):
+		for _ in range(n):
+			self.dir.load_content(schedule=True)
+			while self.loader.has_work():
+				self.loader.work()
+
+
+class benchmark_raw_load(object):
+	def __init__(self):
+		SettingsAware.settings = Fake()
+		self.dir = Directory(TESTDIR)
+
+	def bm_run(self, n):
+		generator = self.dir.load_bit_by_bit()
+		for _ in range(n):
+			raw_load_content(self.dir)
+
+def bm_loader(n):
+	"""Do some random calculation"""
+	tloader = benchmark_load(N)
+	traw = benchmark_raw_load(N)
+
+class benchmark_load_varieties(object):
+	def bm_ls(self, n):
+		for _ in range(n):
+			Popen(["ls", '-l', TESTDIR], stdout=open(os.devnull, 'w')).wait()
+
+	def bm_os_listdir_stat(self, n):
+		for _ in range(n):
+			for f in os.listdir(TESTDIR):
+				path = os.path.join(TESTDIR, f)
+				os.stat(path)
+
+	def bm_os_listdir(self, n):
+		for _ in range(n):
+			for f in os.listdir(TESTDIR):
+				path = os.path.join(TESTDIR, f)
+
+	def bm_os_listdir_stat_listdir(self, n):
+		for _ in range(n):
+			for f in os.listdir(TESTDIR):
+				path = os.path.join(TESTDIR, f)
+				os.stat(path)
+				if os.path.isdir(path):
+					os.listdir(path)