⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Timeline



Jul 8, 2018:

10:57 PM Changeset in webkit [233636] by Simon Fraser
  • 4 edits in trunk/Source/WebCore

Optimize packing of RenderSVGViewportContainer
https://bugs.webkit.org/show_bug.cgi?id=187458

Reviewed by Zalan Bujtas.

Shrink RenderSVGViewportContainer from 296 bytes to 280 bytes, saving about 6KB on nytimes.com.

  • rendering/svg/RenderSVGContainer.cpp:

(WebCore::RenderSVGContainer::RenderSVGContainer):

  • rendering/svg/RenderSVGContainer.h:
  • rendering/svg/RenderSVGViewportContainer.h:
10:35 PM Changeset in webkit [233635] by Simon Fraser
  • 2 edits in trunk/Source/WebCore

Shrink RenderTableSection
https://bugs.webkit.org/show_bug.cgi?id=187457

Reviewed by Zalan Bujtas.

Shrink RenderTableSection from 344 to 336 bytes, saving about 3.6KB on nytimes.com.

  • rendering/RenderTableSection.h:
10:09 PM Changeset in webkit [233634] by Simon Fraser
  • 9 edits in trunk/Source/WebCore

Optimize packing of RootInlineBox
https://bugs.webkit.org/show_bug.cgi?id=187430

Reviewed by Zalan Bujtas.

In InlineBox, move the m_logicalWidth float up next to the m_expansion float with m_topLeft next; this
avoids padding of 4 bytes after this float.

In InlineFlowBox, move the bitfields before the pointers so they can snug up into the
4 bytes after m_expansion in the base class.

The comment about m_lineBreakPos's padding in RootInlineBox is wrong; just move it to the end
to avoid padding before the m_lineBreakObj pointer.

Make m_logicalWidth private and have derived classes use the accessor.

Make EllipsisBox 4 bytes smaller too.

  • rendering/EllipsisBox.cpp:

(WebCore::EllipsisBox::EllipsisBox):
(WebCore::EllipsisBox::paintMarkupBox):
(WebCore::EllipsisBox::nodeAtPoint):

  • rendering/EllipsisBox.h:
  • rendering/InlineBox.h:

(WebCore::InlineBox::InlineBox):

  • rendering/InlineFlowBox.cpp:
  • rendering/InlineFlowBox.h:

(WebCore::InlineFlowBox::InlineFlowBox):
(WebCore::InlineFlowBox::frameRectIncludingLineHeight const):

  • rendering/InlineTextBox.cpp:

(WebCore::InlineTextBox::localSelectionRect const):
(WebCore::InlineTextBox::paint):
(WebCore::InlineTextBox::paintPlatformDocumentMarker):
(WebCore::InlineTextBox::paintMarkedTextBackground):
(WebCore::InlineTextBox::paintCompositionUnderline const):

  • rendering/RootInlineBox.cpp:

(WebCore::RootInlineBox::RootInlineBox):

  • rendering/RootInlineBox.h:
9:37 PM Changeset in webkit [233633] by Yusuke Suzuki
  • 3 edits in trunk/Source/JavaScriptCore

Unreviewed, build fix for debug builds after r233630
https://bugs.webkit.org/show_bug.cgi?id=187441

  • jit/JIT.cpp:

(JSC::JIT::frameRegisterCountFor):

  • llint/LLIntEntrypoint.cpp:

(JSC::LLInt::frameRegisterCountFor):

9:10 PM Changeset in webkit [233632] by commit-queue@webkit.org
  • 7 edits in trunk

[Web Animations] A number of tests report an incorrect computed offset
https://bugs.webkit.org/show_bug.cgi?id=187410
<rdar://problem/41905790>

Patch by Antoine Quint <Antoine Quint> on 2018-07-08
Reviewed by Dean Jackson.

LayoutTests/imported/w3c:

Mark 16 new WPT progressions.

  • web-platform-tests/web-animations/interfaces/Animatable/animate-expected.txt:
  • web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor-expected.txt:
  • web-platform-tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001-expected.txt:
  • web-platform-tests/web-animations/interfaces/KeyframeEffect/setKeyframes-expected.txt:

Source/WebCore:

While we would correctly avoid computing missing offsets when processing the first keyframe following the last
keyframes with a specified offset, we were forgetting to update the index of the last keyframe with a specified
offset which meant we would accidentally override a specified offset with an automically-computed one.

  • animation/KeyframeEffectReadOnly.cpp:

(WebCore::computeMissingKeyframeOffsets):

4:18 PM Changeset in webkit [233631] by fpizlo@apple.com
  • 2 edits in trunk/Tools

run-benchmark should run ARES-6 1.0.1
https://bugs.webkit.org/show_bug.cgi?id=187452

Reviewed by Sam Weinig.

We forgot to update this when we released 1.0.1!

  • Scripts/webkitpy/benchmark_runner/data/plans/ares6.plan:
10:59 AM Changeset in webkit [233630] by Yusuke Suzuki
  • 20 edits in trunk/Source/JavaScriptCore

[JSC] Optimize layout of CodeBlock to reduce padding
https://bugs.webkit.org/show_bug.cgi?id=187441

Reviewed by Mark Lam.

Arrange the order of members to reduce the size of CodeBlock from 552 to 544.
We also make SourceCodeRepresentation 1 byte since CodeBlock has a vector of this,
Vector<SourceCodeRepresentation> m_constantsSourceCodeRepresentation.

We also move m_numCalleeLocals and m_numVars from public to private in CodeBlock.

  • bytecode/BytecodeDumper.cpp:

(JSC::BytecodeDumper<Block>::dumpBlock):

  • bytecode/BytecodeUseDef.h:

(JSC::computeDefsForBytecodeOffset):

  • bytecode/CodeBlock.cpp:

(JSC::CodeBlock::CodeBlock):

  • bytecode/CodeBlock.h:

(JSC::CodeBlock::numVars const):

  • bytecode/UnlinkedCodeBlock.h:

(JSC::UnlinkedCodeBlock::numVars const):

  • dfg/DFGByteCodeParser.cpp:

(JSC::DFG::ByteCodeParser::ByteCodeParser):
(JSC::DFG::ByteCodeParser::flushForTerminalImpl):
(JSC::DFG::ByteCodeParser::handleRecursiveTailCall):
(JSC::DFG::ByteCodeParser::inlineCall):
(JSC::DFG::ByteCodeParser::handleGetById):
(JSC::DFG::ByteCodeParser::handlePutById):
(JSC::DFG::ByteCodeParser::parseBlock):

  • dfg/DFGGraph.h:

(JSC::DFG::Graph::forAllLocalsLiveInBytecode):

  • dfg/DFGOSREntrypointCreationPhase.cpp:

(JSC::DFG::OSREntrypointCreationPhase::run):

  • dfg/DFGVariableEventStream.cpp:

(JSC::DFG::VariableEventStream::reconstruct const):

  • ftl/FTLOSREntry.cpp:

(JSC::FTL::prepareOSREntry):

  • ftl/FTLState.cpp:

(JSC::FTL::State::State):

  • interpreter/Interpreter.cpp:

(JSC::Interpreter::dumpRegisters):

  • jit/JIT.cpp:

(JSC::JIT::frameRegisterCountFor):

  • jit/JITOpcodes.cpp:

(JSC::JIT::emit_op_enter):

  • jit/JITOpcodes32_64.cpp:

(JSC::JIT::emit_op_enter):

  • jit/JITOperations.cpp:
  • llint/LLIntEntrypoint.cpp:

(JSC::LLInt::frameRegisterCountFor):

  • llint/LLIntSlowPaths.cpp:

(JSC::LLInt::traceFunctionPrologue):
(JSC::LLInt::LLINT_SLOW_PATH_DECL):

  • runtime/JSCJSValue.h:
10:39 AM Changeset in webkit [233629] by Yusuke Suzuki
  • 7 edits in trunk/Source

[JSC] Optimize padding of UnlinkedCodeBlock to shrink
https://bugs.webkit.org/show_bug.cgi?id=187448

Reviewed by Saam Barati.

Source/JavaScriptCore:

We optimize the size of CodeType and TriState. And we arrange the layout of UnlinkedCodeBlock.
These optimizations reduce the size of UnlinkedCodeBlock from 304 to 288.

  • bytecode/CodeType.h:
  • bytecode/UnlinkedCodeBlock.cpp:

(JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):

  • bytecode/UnlinkedCodeBlock.h:

(JSC::UnlinkedCodeBlock::codeType const):
(JSC::UnlinkedCodeBlock::didOptimize const):
(JSC::UnlinkedCodeBlock::setDidOptimize):

  • bytecode/VirtualRegister.h:

Source/WTF:

  • wtf/TriState.h:
9:58 AM Changeset in webkit [233628] by ddkilzer@apple.com
  • 3 edits
    5 adds in trunk

DOMMatrix.invertSelf() returns garbage values for a non-invertible matrix
<https://webkit.org/b/187446>
<rdar://problem/41853187>

Reviewed by Daniel Bates.

Source/WebCore:

Test: http/wpt/css/geometry/DOMMatrix-invertSelf.html

  • css/DOMMatrix.cpp:

(WebCore::DOMMatrix::invertSelf): Add missing else, and
restructure to use positive logic.

LayoutTests:

  • http/wpt/css/geometry/DOMMatrix-invertSelf-expected.txt: Add.
  • http/wpt/css/geometry/DOMMatrix-invertSelf.html: Add.
  • http/wpt/css/geometry/support/dommatrix-test-util.js: Copy from LayoutTests/imported/w3c/web-platform-tests/css/geometry/support/dommatrix-test-util.js.
9:41 AM Changeset in webkit [233627] by Yusuke Suzuki
  • 4 edits in trunk/Source/JavaScriptCore

[JSC] Optimize padding of InferredTypeTable by using cellLock
https://bugs.webkit.org/show_bug.cgi?id=187447

Reviewed by Mark Lam.

Use cellLock() in InferredTypeTable to guard changes of internal structures.
This is the same usage to SparseArrayValueMap. By using cellLock(), we can
reduce the size of InferredTypeTable from 40 to 32.

  • runtime/InferredTypeTable.cpp:

(JSC::InferredTypeTable::visitChildren):
(JSC::InferredTypeTable::get):
(JSC::InferredTypeTable::willStoreValue):
(JSC::InferredTypeTable::makeTop):

  • runtime/InferredTypeTable.h:

Using enum class and using. And remove isEmpty() since it is not used.

  • runtime/Structure.h:
5:29 AM Changeset in webkit [233626] by Yusuke Suzuki
  • 3 edits in trunk/Source/JavaScriptCore

[JSC] Optimize layout of SourceProvider to reduce padding
https://bugs.webkit.org/show_bug.cgi?id=187440

Reviewed by Mark Lam.

Arrange members of SourceProvider to reduce the size from 80 to 72.

  • parser/SourceProvider.cpp:

(JSC::SourceProvider::SourceProvider):

  • parser/SourceProvider.h:
2:54 AM Changeset in webkit [233625] by mark.lam@apple.com
  • 2 edits in trunk/Source/JavaScriptCore

PropertyTable::skipDeletedEntries() should guard against iterating past the table end.
https://bugs.webkit.org/show_bug.cgi?id=187444
<rdar://problem/41282849>

Reviewed by Saam Barati.

PropertyTable supports C++ iteration by offering begin() and end() methods, and
an iterator class. The begin() methods and the iterator operator++() method uses
PropertyTable::skipDeletedEntries() to skip over deleted entries in the table.
However, PropertyTable::skipDeletedEntries() does not prevent the iteration
pointer from being incremented past the end of the table. As a result, we can
iterate past the end of the table. Note that the C++ iteration protocol tests
for the iterator not being equal to the end() value. It does not do a <= test.
If the iterator ever shoots past end, the loop will effectively not terminate.

This issue can manifest if and only if the last entry in the table is a deleted
one, and the key field of the PropertyMapEntry shaped space at the end of the
table (the one beyond the last) contains a 1 (i.e. PROPERTY_MAP_DELETED_ENTRY_KEY)
value.

No test because manifesting this issue requires uncontrollable happenstance where
memory just beyond the end of the table looks like a deleted entry.

  • runtime/PropertyMapHashTable.h:

(JSC::PropertyTable::begin):
(JSC::PropertyTable::end):
(JSC::PropertyTable::begin const):
(JSC::PropertyTable::end const):
(JSC::PropertyTable::skipDeletedEntries):

Jul 7, 2018:

3:29 PM Changeset in webkit [233624] by youenn@apple.com
  • 2 edits in trunk/Tools

WPT importer should create dummy HTML files for *.window.js script files
https://bugs.webkit.org/show_bug.cgi?id=187426

Reviewed by Ryosuke Niwa.

Some WPT tests use *.window.js tests, which should be accessed as *.window.html.
Do the same strategy as done for worker.js/any.js files.

  • Scripts/webkitpy/w3c/test_importer.py:

(TestImporter.write_html_files_for_templated_js_tests):

2:05 PM Changeset in webkit [233623] by Wenson Hsieh
  • 13 edits
    1 add in trunk

Introduce a layout milestone to track when the document contains a large number of rendered characters
https://bugs.webkit.org/show_bug.cgi?id=187412
<rdar://problem/41744338>

Reviewed by Ryosuke Niwa.

Source/WebCore:

Implements a new layout milestone: DidRenderSignificantAmountOfText. This is similar to the existing
DidFirstVisuallyNonEmptyLayout milestone, but with a few important additional constraints:

  • The minimum threshold of rendered characters is much larger (3000 instead of 200).
  • The mean length of a text node must be large (at least 50).

This is a (computationally) lightweight heuristic intended to estimate the likelihood that a page is capable of
being presented in Reader mode. In many article-like pages, the average length of a text node is significantly
longer than other types of pages; thus, on pages where the average length of a text node is very large *and*
there is a large quantity of text, we can use this as a cue to opportunistically detect and enter Safari reader
mode on watchOS.

Test: RenderingProgressTests.DidRenderSignificantAmountOfText

  • page/FrameView.cpp:

(WebCore::FrameView::reset):

Clear out new state members that keep track of whether the significant rendered text milestone has been met.

(WebCore::elementOverflowRectIsLargerThanThreshold):

Factor out logic to grab the overflow height of an element into a separate helper function.

(WebCore::FrameView::qualifiesAsVisuallyNonEmpty const):
(WebCore::FrameView::updateSignificantRenderedTextMilestoneIfNeeded):

Determines whether to fire this new milestone after the next layout pass is finished. The logic here is similar
to the logic in qualifiesAsVisuallyNonEmpty, requiring that there are not still pending stylesheets in the head
and that the document height is at least a minimum threshold. However, unlike the first visually non-empty
layout, this milestone is never guaranteed to fire.

(WebCore::FrameView::fireLayoutRelatedMilestonesIfNeeded):

  • page/FrameView.h:

(WebCore::FrameView::incrementVisuallyNonEmptyCharacterCount):

  • page/LayoutMilestones.h:

Source/WebKit:

Add plumbing for the new significant rendered text layout milestone in the modern WebKit client layer. See
WebCore/ChangeLog for more details.

  • Shared/API/Cocoa/_WKRenderingProgressEvents.h:
  • Shared/API/Cocoa/_WKRenderingProgressEventsInternal.h:

(renderingProgressEvents):

  • Shared/API/c/WKPageLoadTypes.h:
  • Shared/API/c/WKSharedAPICast.h:

(WebKit::toWKLayoutMilestones):
(WebKit::toLayoutMilestones):

  • UIProcess/API/Cocoa/WKWebView.mm:

(layoutMilestones):

Tools:

Add a new API test to check that we observe the new rendering milestone in an article-like document.

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKitCocoa/significant-text-milestone.html: Added.
  • TestWebKitAPI/Tests/ios/RenderingProgressTests.mm:

(TEST):

1:46 PM Changeset in webkit [233622] by Yusuke Suzuki
  • 2 edits in trunk/Source/JavaScriptCore

[JSC] Optimize layout of SymbolTable to reduce padding
https://bugs.webkit.org/show_bug.cgi?id=187437

Reviewed by Mark Lam.

Arrange the layout of SymbolTable to reduce the size from 88 to 72.

  • runtime/SymbolTable.h:
1:29 PM Changeset in webkit [233621] by Yusuke Suzuki
  • 5 edits in trunk/Source/JavaScriptCore

[JSC] Optimize layout of RegExp to reduce padding
https://bugs.webkit.org/show_bug.cgi?id=187438

Reviewed by Mark Lam.

Reduce the size of RegExp from 168 to 144.

  • runtime/RegExp.cpp:

(JSC::RegExp::RegExp):

  • runtime/RegExp.h:
  • runtime/RegExpKey.h:
  • yarr/YarrErrorCode.h:
1:29 PM Changeset in webkit [233620] by Yusuke Suzuki
  • 2 edits in trunk/Source/JavaScriptCore

[JSC] Optimize layout of ValueProfile to reduce padding
https://bugs.webkit.org/show_bug.cgi?id=187439

Reviewed by Mark Lam.

Reduce the size of ValueProfile from 40 to 32 by reordering members.

  • bytecode/ValueProfile.h:

(JSC::ValueProfileBase::ValueProfileBase):

11:40 AM Changeset in webkit [233619] by bshafiei@apple.com
  • 7 edits in branches/safari-606.1.24-branch/Source

Versioning.

11:39 AM Changeset in webkit [233618] by bshafiei@apple.com
  • 1 copy in tags/Safari-606.1.24.4

Tag Safari-606.1.24.4.

11:38 AM Changeset in webkit [233617] by bshafiei@apple.com
  • 2 edits in branches/safari-606.1.24-branch/Source/WebKit

Cherry-pick r233616. rdar://problem/41931915

REGRESSION (r233561): MobileMail crashes when replying to an email
https://bugs.webkit.org/show_bug.cgi?id=187436
rdar://problem/41931915

Reviewed by Alan Bujtas.

r233561 added a RELEASE_ASSERT(isMainThread()) in this function. This is fine most of the time,
until Mail spawns a WebThread for mail compose, at which point the meaning of isMainThread changes
and the RELEASE_ASSERT fires.

For now, just remove the RELEASE_ASSERT.

  • UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _scheduleVisibleContentRectUpdateAfterScrollInView:]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233616 268f45cc-cd09-0410-ab3c-d52691b4dbfc

10:50 AM Changeset in webkit [233616] by Simon Fraser
  • 2 edits in trunk/Source/WebKit

REGRESSION (r233561): MobileMail crashes when replying to an email
https://bugs.webkit.org/show_bug.cgi?id=187436
rdar://problem/41931915

Reviewed by Alan Bujtas.

r233561 added a RELEASE_ASSERT(isMainThread()) in this function. This is fine most of the time,
until Mail spawns a WebThread for mail compose, at which point the meaning of isMainThread changes
and the RELEASE_ASSERT fires.

For now, just remove the RELEASE_ASSERT.

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _scheduleVisibleContentRectUpdateAfterScrollInView:]):

9:20 AM Changeset in webkit [233615] by ddkilzer@apple.com
  • 2 edits in trunk/Source/WTF

iOS port should define HAVE_RUNLOOP_TIMER
<https://webkit.org/b/187370>

Reviewed by Simon Fraser.

  • wtf/Platform.h:

(HAVE_DTRACE): Remove unused macro since r200568.
(HAVE_RUNLOOP_TIMER): Define for PLATFORM(COCOA), not just
PLATFORM(MAC). Alphabetize macros.

8:52 AM Changeset in webkit [233614] by Simon Fraser
  • 5 edits
    1 copy
    3 adds in trunk/Tools

dump-class-layout reports wrong padding in many cases
https://bugs.webkit.org/show_bug.cgi?id=185801

Reviewed by Dan Bates.

Enhance dump-class-layout, fixing bugs and adding unit tests. This also includes
the patch from bug 187141.

Move the code that uses lldb to fetch the class layout to its own module,
lldb_dump_class_layout.py, so it can be unit tested. Change this code
to build up a data structure for the class. This is necessary since correct
padding computation is easier with second traversal over the data structure.

Try to deal with the empty base class optimization, which is necessary to report
correct padding in classes using std::unique_ptr, and correctly handle virtual base classes.

The ClassLayoutBase class knows how to test for equality and generate a string
or string list representation of itself. The derived ClassLayout class knows
how to build up the class layout using the lldb Python bindings.

Finally we wrap the lldb debugger instance in LLDBDebuggerInstance so that we don't
have to make a new one for each unit test. The tests have to run serially.

Add to lldbWebKitTester a .cpp file that contains a set of C++ classes to unit-test
dump-class-layout.

  • Scripts/dump-class-layout:

(main):

  • lldb/dump_class_layout_unittest.py:

(destroy_cached_debug_session):
(TestDumpClassLayout):
(TestDumpClassLayout.setUpClass):
(TestDumpClassLayout.setUp):
(TestDumpClassLayout.serial_test_BasicClassLayout):
(serial_test_PaddingBetweenClassMembers):
(serial_test_BoolPaddingClass):
(serial_test_ClassWithEmptyClassMembers):
(serial_test_SimpleVirtualClass):
(serial_test_SimpleVirtualClassWithNonVirtualBase):
(serial_test_InterleavedVirtualNonVirtual):
(serial_test_ClassWithTwoVirtualBaseClasses):
(serial_test_ClassWithClassMembers):
(serial_test_ClassWithBitfields):
(serial_test_ClassWithUniquePtrs):
(serial_test_ClassWithOptionals):
(TestDumpClassLayout.test_BasicClassLayout): Deleted.

  • lldb/lldbWebKitTester/DumpClassLayoutTesting.cpp:

(EmptyClass::doStuff):
(VirtualBaseClass::~VirtualBaseClass):
(VirtualBaseClass2::~VirtualBaseClass2):
(SimpleVirtualClass::~SimpleVirtualClass):
(SimpleVirtualClass::doStuff):
(SimpleVirtualClassWithNonVirtualBase::~SimpleVirtualClassWithNonVirtualBase):
(SimpleVirtualClassWithNonVirtualBase::doStuff):
(avoidClassDeadStripping):

  • lldb/lldb_dump_class_layout.py:

(ansi_colors):
(ClassLayoutBase):
(ClassLayoutBase.init):
(ClassLayoutBase.ne):
(ClassLayoutBase.eq):
(ClassLayoutBase._to_string_recursive):
(ClassLayoutBase.as_string_list):
(ClassLayoutBase.as_string):
(ClassLayoutBase.dump):
(ClassLayoutExpected):
(ClassLayoutExpected.init):
(ClassLayout):
(ClassLayout.init):
(ClassLayout._has_polymorphic_base_class):
(ClassLayout._parse):
(ClassLayout._probably_has_empty_base_class_optimization):
(ClassLayout._compute_padding_recursive):
(ClassLayout._compute_padding):
(LLDBDebuggerInstance):
(LLDBDebuggerInstance.init):
(LLDBDebuggerInstance.del):
(LLDBDebuggerInstance._get_first_file_architecture):
(LLDBDebuggerInstance.layout_for_classname):
(ClassLayoutDumper): Deleted.
(ClassLayoutDumper.init): Deleted.
(ClassLayoutDumper._get_first_file_architecture): Deleted.
(ClassLayoutDumper.verify_type): Deleted.
(ClassLayoutDumper.verify_type_recursive): Deleted.
(ClassLayoutDumper._class_layout_as_string): Deleted.
(ClassLayoutDumper.dump_to_string): Deleted.
(ClassLayoutDumper.dump): Deleted.

12:10 AM Changeset in webkit [233613] by Yusuke Suzuki
  • 2 edits in trunk/Source/WTF

[linux] ASSERT: Using an alternative signal stack is not supported. Consider disabling the concurrent GC.
https://bugs.webkit.org/show_bug.cgi?id=187297

Reviewed by Mark Lam.

This patch relaxes the JSC's limitation: accepting an alternative signal stack mechanism.

  • wtf/ThreadingPthreads.cpp:

(WTF::getApproximateStackPointer):
Fix approximate stack pointer function to make it valid.

(WTF::Thread::signalHandlerSuspendResume):
Use StackBounds::contains to check whether the given stack pointer is in range of StackBounds.
If it is out of range, it seems that this stack pointer is pointing an alternative signal stack.

(WTF::Thread::suspend):
Repeatedly retry suspension by using Thread::yield().

(WTF::isOnAlternativeSignalStack): Deleted.

Note: See TracTimeline for information about the timeline view.