https://bugs.webkit.org/show_bug.cgi?id=103577
TiledDrawingArea should recycle tiles
-and corresponding-
<rdar://problem/12714586>

Reviewed by Simon Fraser.

New class LayerPool will keep a list of layers to reuse so that 
we can avoid creating and destroying so many layer.

When removing layers, add them to the LayerPool
* platform/graphics/ca/mac/TileCache.mm:
(WebCore::TileCache::revalidateTiles):

Before creating a new layer, try to get one of the appropriate size 
from the LayerPool.
(WebCore::TileCache::createTileLayer):

New class.
* WebCore.xcodeproj/project.pbxproj:
* platform/graphics/ca/mac/LayerPool.h: Added.
(WebCore):
(LayerPool):
(WebCore::LayerPool::capacity):
(WebCore::LayerPool::canReuseLayerWithSize):
* platform/graphics/ca/mac/LayerPool.mm: Added.
(WebCore):
(WebCore::LayerPool:: LayerPool):
(WebCore::LayerPool::sharedPool):
(WebCore::LayerPool::bytesBackingLayerWithPixelSize):
(WebCore::LayerPool::listOfLayersWithSize):
(WebCore::LayerPool::addLayer):
(WebCore::LayerPool::takeLayerWithSize):
(WebCore::LayerPool::decayedCapacity):
(WebCore::LayerPool::schedulePrune):
(WebCore::LayerPool::prune):
(WebCore::LayerPool::drain):

If we're under memory pressure, drain the LayerPool
* platform/mac/MemoryPressureHandlerMac.mm:
(WebCore::MemoryPressureHandler::releaseMemory):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@136151 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[GTK] [WebKit2] Embed the HTTP authentication dialog into the WebView
https://bugs.webkit.org/show_bug.cgi?id=103277

Patch by Martin Robinson <mrobinson@igalia.com> on 2012-11-29
Reviewed by Carlos Garcia Campos.

Source/WebCore:

Refactor the WebCore authentication dialog so that it can be reused for the WebKit2
embedded authentication dialog. The main purpose of this refactor is so that the
dialog does not rely on GtkDialog to add the action buttons to the dialog itself.
This also simplifies the structure of the dialog, using the GtkTable or GtkGrid to
contain more of the widget elements, greatly simplifying this code. We also expose
a new constructor that does not create the parent GtkDialog -- so that WebKit2
can embed the dialog directly into the WebView.

No new tests. This shouldn't change behavior, only slightly the look of the authentication
dialog.

* platform/gtk/GtkAuthenticationDialog.cpp:
(WebCore::GtkAuthenticationDialog::GtkAuthenticationDialog): Added this new constructor
which does not add the dialog contents to a GtkDialog.
(WebCore::packTwoColumnLayoutInBox): Added this generic method for creating a two column
layout in the style the dialog box needs (for both GTK+ 2.x and GTK+ 3.x).
(WebCore::createDialogLabel): Added this helper.
(WebCore::createDialogEntry): ditto.
(WebCore::GtkAuthenticationDialog::createContentsInContainer): Added this method which
can be used by subclasses to add the guts of the dialog to the parent container.
(WebCore::GtkAuthenticationDialog::show): Added some focus/default handling code that
GtkDialog was calling before.
(WebCore::GtkAuthenticationDialog::buttonClickedCallback): Added a button clicked handler.
Before GtkDialog handled this.
* platform/gtk/GtkAuthenticationDialog.h: Updated methods to reflect new functionality.
(WebCore::GtkAuthenticationDialog::~GtkAuthenticationDialog): Inline the default constructor.

Source/WebKit2:

Embed the WebKit2 HTTP authentication dialog into the WebView. Add the dialog as a child
of the WebKitWebViewBase container (like the web inspector).

We do not yet properly handle pages that require authentication for more than one resource.
As that is an uncommon situation, it will be handled in another patch.

* UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp:
(WebKit::drawSignal): We have to override the draw signal of the dialog to draw
a GtkWindow background on the widget. This is required because the widget doesn't
have a real GtkWindow to draw its background.
(WebKit::loadChangedSignal): When a new load starts in the WebView destroy the dialog. This
is so that the dialog doesn't stick around when the user chooses to navigate away from the
page requiring authentication.
(WebKit::WebKit2GtkAuthenticationDialog::WebKit2GtkAuthenticationDialog): Create an eventbox
and frame to hold the dialog contents. Also append the 'background' widget class to the
event box, so that it can draw a GtkWindow background in the draw signal handler.
(WebKit::WebKit2GtkAuthenticationDialog::~WebKit2GtkAuthenticationDialog): Disconnect the
load status changed signal handler.
(WebKit::WebKit2GtkAuthenticationDialog::show): When it's time to show the dialog, add it to
WebKitWebViewBase.
* UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h: Add some new methods for handling the
embedded dialog.
* UIProcess/API/gtk/WebKitLoaderClient.cpp:
(didReceiveAuthenticationChallengeInFrame): Collapse the creation of the dialog into one line.
* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(_WebKitWebViewBasePrivate): Add the dialog as a property of the private structure.
(webkitWebViewChildIsInternalWidget): Added this helper used for determining when a child widget
is "internal" (ie the web inspector or the authentication dialog).
(webkitWebViewBaseContainerAdd): Only add non-internal widgets to the children map.
(webkitWebViewBaseAddAuthenticationDialog): Added.
(webkitWebViewBaseAddWebInspector): Added this more-foolproof method of adding a web inspector
to the WebView. This also aligns it with the way the authentication dialog is added.
(webkitWebViewBaseContainerRemove): When removing the authentication dialog, zero out the
field in the private structure.
(webkitWebViewBaseContainerForall): Add support for the authentication dialog here too.
(webkitWebViewBaseChildMoveResize): Don't pass on move_resize events to internal children.
(webkit_web_view_base_init): Zero out the authentication dialog member on init.
(webkitWebViewBaseDraw): If the authentication dialog is active, draw a shadow over web content.
(resizeWebKitWebViewBaseFromAllocation): Make the authentication dialog centered in the view.
(webkitWebViewBaseKeyPressEvent): Pass on key events to the authentication dialog if active.
(webkitWebViewBaseButtonPressEvent): If the authentication dialog is active don't pass button events
to web content.
(webkitWebViewBaseButtonReleaseEvent):  Ditto.
(webkitWebViewBaseScrollEvent): Ditto.
(webkitWebViewBaseMotionNotifyEvent): Ditto.
(webkitWebViewBaseFocus): Pass on focus events to the authentication dialog so that tabbing between
elements in the dialog works correctly.
(webkit_web_view_base_class_init): Hook up the focus event.
* UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Add new methods for adding the authentication dialog
and the web inspector.
* UIProcess/gtk/WebInspectorProxyGtk.cpp:
(WebKit::WebInspectorProxy::createInspectorWindow): Use the new method for adding the web inspector.

Tools:

Skip the new WebKit2GtkAuthenticationDialog files so that they are not processed
during gtkdoc generation.

* gtk/generate-gtkdoc:
(get_webkit2_options):

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