| Index: chrome/browser/resources/net_internals/loggrouper.js
|
| ===================================================================
|
| --- chrome/browser/resources/net_internals/loggrouper.js (revision 0)
|
| +++ chrome/browser/resources/net_internals/loggrouper.js (revision 0)
|
| @@ -0,0 +1,95 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +/**
|
| + * LogGroupEntry is a wrapper around log entries, which makes it easier to
|
| + * find the corresponding start/end of events.
|
| + *
|
| + * This is used internally by the log and timeline views to pretty print
|
| + * collections of log entries.
|
| + *
|
| + * @fileoverview
|
| + */
|
| +
|
| +// TODO(eroman): document these methods!
|
| +
|
| +function LogGroupEntry(origEntry, index) {
|
| + this.orig = origEntry;
|
| + this.index = index;
|
| +}
|
| +
|
| +LogGroupEntry.prototype.isBegin = function() {
|
| + return this.orig.type == LogEntryType.TYPE_EVENT &&
|
| + this.orig.event.phase == LogEventPhase.PHASE_BEGIN;
|
| +};
|
| +
|
| +LogGroupEntry.prototype.isEnd = function() {
|
| + return this.orig.type == LogEntryType.TYPE_EVENT &&
|
| + this.orig.event.phase == LogEventPhase.PHASE_END
|
| +};
|
| +
|
| +LogGroupEntry.prototype.getDepth = function() {
|
| + var depth = 0;
|
| + var p = this.parentEntry;
|
| + while (p) {
|
| + depth += 1;
|
| + p = p.parentEntry;
|
| + }
|
| + return depth;
|
| +};
|
| +
|
| +function findParentIndex(parentStack, eventType) {
|
| + for (var i = parentStack.length - 1; i >= 0; --i) {
|
| + if (parentStack[i].orig.event.type == eventType)
|
| + return i;
|
| + }
|
| + return -1;
|
| +}
|
| +
|
| +/**
|
| + * Returns a list of LogGroupEntrys. This basically wraps the original log
|
| + * entry, but makes it easier to find the start/end of the event.
|
| + */
|
| +LogGroupEntry.createArrayFrom = function(origEntries) {
|
| + var groupedEntries = [];
|
| +
|
| + // Stack of enclosing PHASE_BEGIN elements.
|
| + var parentStack = [];
|
| +
|
| + for (var i = 0; i < origEntries.length; ++i) {
|
| + var origEntry = origEntries[i];
|
| +
|
| + var groupEntry = new LogGroupEntry(origEntry, i);
|
| + groupedEntries.push(groupEntry);
|
| +
|
| + // If this is the end of an event, match it to the start.
|
| + if (groupEntry.isEnd()) {
|
| + // Walk up the parent stack to find the corresponding BEGIN for this END.
|
| + var parentIndex =
|
| + findParentIndex(parentStack, groupEntry.orig.event.type);
|
| +
|
| + if (parentIndex == -1) {
|
| + // Unmatched end.
|
| + } else {
|
| + groupEntry.begin = parentStack[parentIndex];
|
| +
|
| + // Consider this as the terminator for all open BEGINs up until
|
| + // parentIndex.
|
| + for (var j = 0; j < parentStack.length - parentIndex; ++j) {
|
| + var p = parentStack.pop();
|
| + p.end = groupEntry;
|
| + }
|
| + }
|
| + }
|
| +
|
| + // Inherit the current parent.
|
| + if (parentStack.length > 0)
|
| + groupEntry.parentEntry = parentStack[parentStack.length - 1];
|
| +
|
| + if (groupEntry.isBegin())
|
| + parentStack.push(groupEntry);
|
| + }
|
| +
|
| + return groupedEntries;
|
| +}
|
|
|
| Property changes on: chrome\browser\resources\net_internals\loggrouper.js
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|