Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(314)

Side by Side Diff: tools/deep_memory_profiler/lib/dump.py

Issue 141563014: Make dmprof handle long runs better (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add notes to DumpList class documentation. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | tools/deep_memory_profiler/subcommands/cat.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import copy 5 import copy
6 import datetime 6 import datetime
7 import logging 7 import logging
8 import os 8 import os
9 import re 9 import re
10 import time 10 import time
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 """ 400 """
401 words = stacktrace_line.split() 401 words = stacktrace_line.split()
402 if len(words) < BUCKET_ID + 1: 402 if len(words) < BUCKET_ID + 1:
403 return False 403 return False
404 if words[BUCKET_ID - 1] != '@': 404 if words[BUCKET_ID - 1] != '@':
405 return False 405 return False
406 return True 406 return True
407 407
408 408
409 class DumpList(object): 409 class DumpList(object):
410 """Represents a sequence of heap profile dumps.""" 410 """Represents a sequence of heap profile dumps.
411 411
412 def __init__(self, dump_list): 412 Individual dumps are loaded into memory lazily as the sequence is accessed,
413 self._dump_list = dump_list 413 either while being iterated through or randomly accessed. Loaded dumps are
414 not cached, meaning a newly loaded Dump object is returned every time an
415 element in the list is accessed.
416 """
417
418 def __init__(self, dump_path_list):
419 self._dump_path_list = dump_path_list
414 420
415 @staticmethod 421 @staticmethod
416 def load(path_list): 422 def load(path_list):
417 LOGGER.info('Loading heap dump profiles.') 423 return DumpList(path_list)
418 dump_list = []
419 for path in path_list:
420 dump_list.append(Dump.load(path, ' '))
421 return DumpList(dump_list)
422 424
423 def __len__(self): 425 def __len__(self):
424 return len(self._dump_list) 426 return len(self._dump_path_list)
425 427
426 def __iter__(self): 428 def __iter__(self):
427 for dump in self._dump_list: 429 for dump in self._dump_path_list:
428 yield dump 430 yield Dump.load(dump)
429 431
430 def __getitem__(self, index): 432 def __getitem__(self, index):
431 return self._dump_list[index] 433 return Dump.load(self._dump_path_list[index])
432 434
433 435
434 class ProcMapsEntryAttribute(ExclusiveRangeDict.RangeAttribute): 436 class ProcMapsEntryAttribute(ExclusiveRangeDict.RangeAttribute):
435 """Represents an entry of /proc/maps in range_dict.ExclusiveRangeDict.""" 437 """Represents an entry of /proc/maps in range_dict.ExclusiveRangeDict."""
436 _DUMMY_ENTRY = procfs.ProcMapsEntry( 438 _DUMMY_ENTRY = procfs.ProcMapsEntry(
437 0, # begin 439 0, # begin
438 0, # end 440 0, # end
439 '-', # readable 441 '-', # readable
440 '-', # writable 442 '-', # writable
441 '-', # executable 443 '-', # executable
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 Returns: 480 Returns:
479 A pair of an integer indicating a line number after skipped, and a 481 A pair of an integer indicating a line number after skipped, and a
480 boolean value which is True if found a line which skipping_condition 482 boolean value which is True if found a line which skipping_condition
481 is False for. 483 is False for.
482 """ 484 """
483 while skipping_condition(index): 485 while skipping_condition(index):
484 index += 1 486 index += 1
485 if index >= max_index: 487 if index >= max_index:
486 return index, False 488 return index, False
487 return index, True 489 return index, True
OLDNEW
« no previous file with comments | « no previous file | tools/deep_memory_profiler/subcommands/cat.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698