summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk4
-rw-r--r--JavaScriptCore/VM/CodeGenerator.cpp4
-rw-r--r--JavaScriptCore/VM/Machine.h13
-rw-r--r--JavaScriptCore/VM/SegmentedVector.h174
-rw-r--r--JavaScriptCore/kjs/config.h1
-rw-r--r--WebCore/WebCorePrefixAndroid.h3
-rw-r--r--WebCore/plugins/PluginInfoStore.cpp7
-rw-r--r--WebKit/android/TimeCounter.cpp19
-rw-r--r--WebKit/android/TimeCounter.h17
-rw-r--r--WebKit/android/jni/WebSettings.cpp7
-rw-r--r--WebKit/android/jni/WebViewCore.cpp74
-rw-r--r--WebKit/android/nav/CacheBuilder.cpp8
-rw-r--r--WebKit/android/nav/FindCanvas.cpp25
13 files changed, 134 insertions, 222 deletions
diff --git a/Android.mk b/Android.mk
index a0e390f..6b3ee6b 100644
--- a/Android.mk
+++ b/Android.mk
@@ -70,10 +70,6 @@ ifeq ($(TARGET_ARCH),arm)
LOCAL_CFLAGS += -Darm -fvisibility=hidden
endif
-ifeq ($(WEBCORE_INSTRUMENTATION),true)
-LOCAL_CFLAGS += -DANDROID_INSTRUMENT
-endif
-
# LOCAL_LDLIBS is used in simulator builds only and simulator builds are only
# valid on Linux
LOCAL_LDLIBS += -lpthread -ldl
diff --git a/JavaScriptCore/VM/CodeGenerator.cpp b/JavaScriptCore/VM/CodeGenerator.cpp
index 3bfea93..2cbf59f 100644
--- a/JavaScriptCore/VM/CodeGenerator.cpp
+++ b/JavaScriptCore/VM/CodeGenerator.cpp
@@ -226,7 +226,7 @@ CodeGenerator::CodeGenerator(ProgramNode* programNode, const Debugger* debugger,
m_globalVarStorageOffset = -RegisterFile::CallFrameHeaderSize - m_codeBlock->numParameters - registerFile->size();
// Add previously defined symbols to bookkeeping.
- m_globals.grow(symbolTable->size());
+ m_globals.resize(symbolTable->size());
SymbolTable::iterator end = symbolTable->end();
for (SymbolTable::iterator it = symbolTable->begin(); it != end; ++it)
registerFor(it->second.getIndex()).setIndex(it->second.getIndex() + m_globalVarStorageOffset);
@@ -322,7 +322,7 @@ CodeGenerator::CodeGenerator(FunctionBodyNode* functionBody, const Debugger* deb
const Identifier* parameters = functionBody->parameters();
size_t parameterCount = functionBody->parameterCount();
m_nextParameter = -RegisterFile::CallFrameHeaderSize - parameterCount - 1;
- m_parameters.grow(1 + parameterCount); // reserve space for "this"
+ m_parameters.resize(1 + parameterCount); // reserve space for "this"
// Add "this" as a parameter
m_thisRegister.setIndex(m_nextParameter);
diff --git a/JavaScriptCore/VM/Machine.h b/JavaScriptCore/VM/Machine.h
index 6cb8aaa..9ae4d25 100644
--- a/JavaScriptCore/VM/Machine.h
+++ b/JavaScriptCore/VM/Machine.h
@@ -36,10 +36,6 @@
#include "RegisterFile.h"
#include <wtf/HashMap.h>
-#ifdef ANDROID_INSTRUMENT
-#include "TimeCounter.h"
-#endif
-
namespace JSC {
class CodeBlock;
@@ -149,10 +145,7 @@ namespace JSC {
{
if (!m_timeoutCheckCount)
resetTimeoutCheck();
-#ifdef ANDROID_INSTRUMENT
- if (!m_timeoutCheckCount)
- android::TimeCounter::start(android::TimeCounter::JavaScriptTimeCounter);
-#endif
+
++m_timeoutCheckCount;
}
@@ -160,10 +153,6 @@ namespace JSC {
{
ASSERT(m_timeoutCheckCount);
--m_timeoutCheckCount;
-#ifdef ANDROID_INSTRUMENT
- if (!m_timeoutCheckCount)
- android::TimeCounter::record(android::TimeCounter::JavaScriptTimeCounter, __FUNCTION__);
-#endif
}
inline void initTimeout()
diff --git a/JavaScriptCore/VM/SegmentedVector.h b/JavaScriptCore/VM/SegmentedVector.h
index bbab04f..36ffee0 100644
--- a/JavaScriptCore/VM/SegmentedVector.h
+++ b/JavaScriptCore/VM/SegmentedVector.h
@@ -33,9 +33,6 @@
namespace JSC {
- // SegmentedVector is just like Vector, but it doesn't move the values
- // stored in its buffer when it grows. Therefore, it is safe to keep
- // pointers into a SegmentedVector.
template <typename T, size_t SegmentSize> class SegmentedVector {
public:
SegmentedVector()
@@ -46,120 +43,121 @@ namespace JSC {
~SegmentedVector()
{
- deleteAllSegments();
- }
-
- size_t size() const { return m_size; }
-
- T& at(size_t index)
- {
- if (index < SegmentSize)
- return m_inlineSegment[index];
- return segmentFor(index)->at(subscriptFor(index));
- }
-
- T& operator[](size_t index)
- {
- return at(index);
+ for (size_t i = 1; i < m_segments.size(); i++)
+ delete m_segments[i];
}
T& last()
{
- return at(size() - 1);
+ ASSERT(m_size);
+ return m_segments.last()->last();
}
template <typename U> void append(const U& value)
{
- ++m_size;
-
- if (m_size <= SegmentSize) {
- m_inlineSegment.uncheckedAppend(value);
- return;
- }
-
- if (!segmentExistsFor(m_size - 1))
+ if (!(m_size % SegmentSize) && m_size)
m_segments.append(new Segment);
- segmentFor(m_size - 1)->uncheckedAppend(value);
+ m_segments.last()->uncheckedAppend(value);
+ m_size++;
}
void removeLast()
{
- if (m_size <= SegmentSize)
- m_inlineSegment.removeLast();
- else
- segmentFor(m_size - 1)->removeLast();
- --m_size;
+ ASSERT(m_size);
+ m_size--;
+ m_segments.last()->removeLast();
+ if (!(m_size % SegmentSize) && m_size >= SegmentSize) {
+ delete m_segments.last();
+ m_segments.removeLast();
+ }
}
- void grow(size_t size)
+ size_t size() const
{
- ASSERT(size > m_size);
- ensureSegmentsFor(size);
- m_size = size;
+ return m_size;
}
- void clear()
+ T& operator[](size_t index)
{
- deleteAllSegments();
- m_segments.resize(1);
- m_inlineSegment.clear();
- m_size = 0;
+ ASSERT(index < m_size);
+ if (index < SegmentSize)
+ return m_inlineSegment[index];
+ return m_segments[index / SegmentSize]->at(index % SegmentSize);
}
- private:
- typedef Vector<T, SegmentSize> Segment;
-
- void deleteAllSegments()
- {
- // Skip the first segment, because it's our inline segment, which was
- // not created by new.
- for (size_t i = 1; i < m_segments.size(); i++)
- delete m_segments[i];
- }
-
- bool segmentExistsFor(size_t index)
+ void resize(size_t size)
{
- return index / SegmentSize < m_segments.size();
+ if (size < m_size)
+ shrink(size);
+ else if (size > m_size)
+ grow(size);
+ ASSERT(size == m_size);
}
-
- Segment* segmentFor(size_t index)
- {
- return m_segments[index / SegmentSize];
- }
-
- size_t subscriptFor(size_t index)
- {
- return index % SegmentSize;
- }
-
- void ensureSegmentsFor(size_t size)
+
+ private:
+ void shrink(size_t size)
{
- size_t segmentCount = m_size / SegmentSize;
- if (m_size % SegmentSize)
- ++segmentCount;
- segmentCount = std::max<size_t>(segmentCount, 1); // We always have at least our inline segment.
-
- size_t neededSegmentCount = size / SegmentSize;
- if (size % SegmentSize)
- ++neededSegmentCount;
-
- // Fill up to N - 1 segments.
- size_t end = neededSegmentCount - 1;
- for (size_t i = segmentCount - 1; i < end; ++i)
- ensureSegment(i, SegmentSize);
-
- // Grow segment N to accomodate the remainder.
- ensureSegment(end, subscriptFor(size - 1) + 1);
+ ASSERT(size < m_size);
+ size_t numSegments = size / SegmentSize;
+ size_t extra = size % SegmentSize;
+ if (extra)
+ numSegments++;
+ if (!numSegments) {
+ for (size_t i = 1; i < m_segments.size(); i++)
+ delete m_segments[i];
+ m_segments.resize(1);
+ m_inlineSegment.resize(0);
+ return;
+ }
+
+ for (size_t i = numSegments; i < m_segments.size(); i++)
+ delete m_segments[i];
+
+ m_segments.resize(numSegments);
+ if (extra)
+ m_segments.last()->resize(extra);
+ m_size = size;
}
- void ensureSegment(size_t segmentIndex, size_t size)
+ void grow(size_t size)
{
- ASSERT(segmentIndex <= m_segments.size());
- if (segmentIndex == m_segments.size())
- m_segments.append(new Segment);
- m_segments[segmentIndex]->grow(size);
+ ASSERT(size > m_size);
+ if (size <= SegmentSize) {
+ m_inlineSegment.resize(size);
+ m_size = size;
+ return;
+ }
+
+ size_t numSegments = size / SegmentSize;
+ size_t extra = size % SegmentSize;
+ if (extra)
+ numSegments++;
+ size_t oldSize = m_segments.size();
+
+ if (numSegments == oldSize) {
+ m_segments.last()->resize(extra);
+ m_size = size;
+ return;
+ }
+
+ m_segments.last()->resize(SegmentSize);
+
+ m_segments.resize(numSegments);
+
+ ASSERT(oldSize < m_segments.size());
+ for (size_t i = oldSize; i < (numSegments - 1); i++) {
+ Segment* segment = new Segment;
+ segment->resize(SegmentSize);
+ m_segments[i] = segment;
+ }
+
+ Segment* segment = new Segment;
+ segment->resize(extra ? extra : SegmentSize);
+ m_segments[numSegments - 1] = segment;
+ m_size = size;
}
+ typedef Vector<T, SegmentSize> Segment;
size_t m_size;
Segment m_inlineSegment;
Vector<Segment*, 32> m_segments;
diff --git a/JavaScriptCore/kjs/config.h b/JavaScriptCore/kjs/config.h
index 53bc0a9..80a3798 100644
--- a/JavaScriptCore/kjs/config.h
+++ b/JavaScriptCore/kjs/config.h
@@ -28,6 +28,7 @@
#if PLATFORM(ANDROID)
#define ANDROID_MOBILE // change can be merged back to WebKit.org for MOBILE
+//#define ANDROID_INSTRUMENT
#endif
#if PLATFORM(WIN_OS)
diff --git a/WebCore/WebCorePrefixAndroid.h b/WebCore/WebCorePrefixAndroid.h
index 96fa376..c4782b6 100644
--- a/WebCore/WebCorePrefixAndroid.h
+++ b/WebCore/WebCorePrefixAndroid.h
@@ -81,6 +81,9 @@ typedef unsigned char flex_uint8_t;
#define ANDROID_SELECT_TEXT_AREAS
#define ANDROID_FIX
+// note: if uncomment ANDROID_INSTRUMENT here, you must also
+// uncomment it on line 31 of JavaScriptCore/kjs/config.h
+// #define ANDROID_INSTRUMENT
// Fix for issue 878095. Only call onBlur on an element if it has an
// onBlur event.
diff --git a/WebCore/plugins/PluginInfoStore.cpp b/WebCore/plugins/PluginInfoStore.cpp
index bd2f2d0..732a1e1 100644
--- a/WebCore/plugins/PluginInfoStore.cpp
+++ b/WebCore/plugins/PluginInfoStore.cpp
@@ -27,9 +27,6 @@
#include "PluginInfoStore.h"
#include "KURL.h"
-#if PLATFORM(ANDROID)
-#include "Page.h"
-#endif
#include "PluginData.h"
#include "PluginDatabase.h"
#include "PluginPackage.h"
@@ -96,15 +93,11 @@ bool PluginInfoStore::supportsMIMEType(const WebCore::String& mimeType)
void refreshPlugins(bool reloadOpenPages)
{
-#if PLATFORM(ANDROID)
- Page::refreshPlugins(reloadOpenPages);
-#else
PluginDatabase::installedPlugins()->refresh();
if (reloadOpenPages) {
// FIXME: reload open pages
}
-#endif
}
}
diff --git a/WebKit/android/TimeCounter.cpp b/WebKit/android/TimeCounter.cpp
index 0dc0f3e..c92afb2 100644
--- a/WebKit/android/TimeCounter.cpp
+++ b/WebKit/android/TimeCounter.cpp
@@ -56,19 +56,18 @@ uint32_t TimeCounter::sLastCounter[TimeCounter::TotalTimeCounterCount];
uint32_t TimeCounter::sStartTime[TimeCounter::TotalTimeCounterCount];
static const char* timeCounterNames[] = {
- "css parsing",
- "javascript",
"calculate style",
+ "css parsing",
"Java callback (frame bridge)",
- "parsing (may include calcStyle or Java callback)",
"layout",
"native 1 (frame bridge)",
- "native 2 (resource load)",
- "native 3 (shared timer)",
+ "parsing (may include calcStyle or Java callback)",
+ "native 3 (resource load)",
+ "native 2 (shared timer)",
"build nav (webview core)",
+ "draw content (webview core)",
"record content (webview core)",
- "native 4 (webview core)",
- "draw content (webview ui)",
+ "native 4 (webview core)"
};
void TimeCounter::record(enum Type type, const char* functionName)
@@ -93,6 +92,8 @@ void TimeCounter::report(const KURL& url, int live, int dead)
int threadTime = get_thread_msec() - sStartThreadTime;
LOGD("*-* Total load time: %d ms, thread time: %d ms for %s\n",
totalTime, threadTime, urlString.utf8().data());
+// FIXME: JSGlobalObject no longer records time
+// JSC::JSGlobalObject::reportTimeCounter();
for (Type type = (Type) 0; type < TotalTimeCounterCount; type
= (Type) (type + 1)) {
char scratch[256];
@@ -114,6 +115,8 @@ void TimeCounter::reportNow()
LOGD("*-* Elapsed time: %d ms, ui thread time: %d ms, webcore thread time:"
" %d ms\n", elapsedTime, elapsedThreadTime, sEndWebCoreThreadTime -
sStartWebCoreThreadTime);
+// FIXME: JSGlobalObject no longer records time
+// JSC::JSGlobalObject::reportTimeCounter();
for (Type type = (Type) 0; type < TotalTimeCounterCount; type
= (Type) (type + 1)) {
if (sTotalTimeUsed[type] == sLastTimeUsed[type])
@@ -134,6 +137,8 @@ void TimeCounter::reportNow()
}
void TimeCounter::reset() {
+// FIXME: JSGlobalObject no longer records time
+// JSC::JSGlobalObject::resetTimeCounter();
bzero(sTotalTimeUsed, sizeof(sTotalTimeUsed));
bzero(sCounter, sizeof(sCounter));
LOGD("*-* Start browser instrument\n");
diff --git a/WebKit/android/TimeCounter.h b/WebKit/android/TimeCounter.h
index d1b2dff..58d2468 100644
--- a/WebKit/android/TimeCounter.h
+++ b/WebKit/android/TimeCounter.h
@@ -41,21 +41,18 @@ namespace android {
class TimeCounter {
public:
enum Type {
- // function base counters
- CSSTimeCounter,
- JavaScriptTimeCounter,
CalculateStyleTimeCounter,
+ CSSTimeCounter,
JavaCallbackTimeCounter,
- ParsingTimeCounter,
LayoutTimeCounter,
- // file base counters
- NativeCallbackTimeCounter, // WebCoreFrameBridge.cpp
- ResourceTimeCounter, // WebCoreResourceLoader.cpp
- SharedTimerTimeCounter, // JavaBridge.cpp
+ NativeCallbackTimeCounter,
+ ParsingTimeCounter,
+ ResourceTimeCounter,
+ SharedTimerTimeCounter,
WebViewCoreBuildNavTimeCounter,
+ WebViewCoreDrawTimeCounter,
WebViewCoreRecordTimeCounter,
- WebViewCoreTimeCounter, // WebViewCore.cpp
- WebViewUIDrawTimeCounter,
+ WebViewCoreTimeCounter,
TotalTimeCounterCount
};
diff --git a/WebKit/android/jni/WebSettings.cpp b/WebKit/android/jni/WebSettings.cpp
index 407544a..855abdd 100644
--- a/WebKit/android/jni/WebSettings.cpp
+++ b/WebKit/android/jni/WebSettings.cpp
@@ -305,11 +305,8 @@ public:
pluginDatabase->setPluginDirectories(paths);
// Set the home directory for plugin temporary files
WebCore::sPluginPath = paths[0];
- // Reload plugins. We call Page::refreshPlugins() instead
- // of pluginDatabase->refresh(), as we need to ensure that
- // the list of mimetypes exposed by the browser are also
- // updated.
- WebCore::Page::refreshPlugins(false);
+ // Reload plugins.
+ pluginDatabase->refresh();
}
}
#endif
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp
index d9f9cec..ee74685 100644
--- a/WebKit/android/jni/WebViewCore.cpp
+++ b/WebKit/android/jni/WebViewCore.cpp
@@ -476,7 +476,7 @@ void WebViewCore::copyContentToPicture(SkPicture* picture)
bool WebViewCore::drawContent(SkCanvas* canvas, SkColor color)
{
#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewUIDrawTimeCounter);
+ TimeCounterAuto counter(TimeCounter::WebViewCoreDrawTimeCounter);
#endif
DBG_SET_LOG("start");
m_contentMutex.lock();
@@ -1153,20 +1153,21 @@ bool WebViewCore::commonKitFocus(int generation, int buildGeneration,
bool WebViewCore::finalKitFocus(WebCore::Frame* frame, WebCore::Node* node,
int x, int y, bool donotChangeDOMFocus)
{
- CacheBuilder& builder = FrameLoaderClientAndroid::
- get(m_mainFrame)->getCacheBuilder();
- if (!frame || builder.validNode(frame, NULL) == false)
+ if (!frame)
frame = m_mainFrame;
+ CacheBuilder& builder = FrameLoaderClientAndroid::get(m_mainFrame)->getCacheBuilder();
WebCore::Node* oldFocusNode = builder.currentFocus();
// mouse event expects the position in the window coordinate
m_mousePos = WebCore::IntPoint(x - m_scrollOffsetX, y - m_scrollOffsetY);
// validNode will still return true if the node is null, as long as we have
// a valid frame. Do not want to make a call on frame unless it is valid.
- WebCore::PlatformMouseEvent mouseEvent(m_mousePos, m_mousePos,
- WebCore::NoButton, WebCore::MouseEventMoved, 1, false, false, false,
- false, WebCore::currentTime());
- frame->eventHandler()->handleMouseMoveEvent(mouseEvent);
bool valid = builder.validNode(frame, node);
+ if (valid) {
+ WebCore::PlatformMouseEvent mouseEvent(m_mousePos, m_mousePos, WebCore::NoButton,
+ WebCore::MouseEventMoved, 1, false, false, false, false, WebCore::currentTime());
+ frame->eventHandler()->handleMouseMoveEvent(mouseEvent);
+ }
+
if (!donotChangeDOMFocus) {
WebCore::Document* oldDoc = oldFocusNode ? oldFocusNode->document() : 0;
if (!node) {
@@ -1736,7 +1737,7 @@ void WebViewCore::touchUp(int touchGeneration, int buildGeneration,
" x=%d y=%d", m_touchGeneration, touchGeneration, x, y);
return; // short circuit if a newer touch has been generated
}
- if (retry || isClick)
+ if (retry)
finalKitFocus(frame, node, x, y, true); // don't change DOM focus
else if (!commonKitFocus(touchGeneration, buildGeneration,
frame, node, x, y, false)) {
@@ -2020,9 +2021,6 @@ static void SetScrollOffset(JNIEnv *env, jobject obj, jint dx, jint dy)
static void SetGlobalBounds(JNIEnv *env, jobject obj, jint x, jint y, jint h,
jint v)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "need viewImpl");
@@ -2133,9 +2131,6 @@ static bool RecordContent(JNIEnv *env, jobject obj, jobject region, jobject pt)
static void SplitContent(JNIEnv *env, jobject obj)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
viewImpl->splitContent();
}
@@ -2179,9 +2174,6 @@ static void SendListBoxChoices(JNIEnv* env, jobject obj, jbooleanArray jArray,
static jstring FindAddress(JNIEnv *env, jobject obj, jstring addr)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
if (!addr)
return 0;
int length = env->GetStringLength(addr);
@@ -2202,9 +2194,6 @@ static jstring FindAddress(JNIEnv *env, jobject obj, jstring addr)
static jboolean HandleTouchEvent(JNIEnv *env, jobject obj, jint action, jint x, jint y)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
return viewImpl->handleTouchEvent(action, x, y);
@@ -2226,9 +2215,6 @@ static void TouchUp(JNIEnv *env, jobject obj, jint touchGeneration,
static jstring RetrieveHref(JNIEnv *env, jobject obj, jint frame,
jint node)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
WebCore::String result = viewImpl->retrieveHref((WebCore::Frame*) frame,
@@ -2266,9 +2252,6 @@ static void SetKitFocus(JNIEnv *env, jobject obj, jint moveGeneration,
static void UnblockFocus(JNIEnv *env, jobject obj)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
viewImpl->unblockFocus();
@@ -2276,9 +2259,6 @@ static void UnblockFocus(JNIEnv *env, jobject obj)
static void UpdateFrameCache(JNIEnv *env, jobject obj)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
viewImpl->updateFrameCache();
@@ -2286,9 +2266,6 @@ static void UpdateFrameCache(JNIEnv *env, jobject obj)
static jint GetContentMinPrefWidth(JNIEnv *env, jobject obj)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
@@ -2307,9 +2284,6 @@ static jint GetContentMinPrefWidth(JNIEnv *env, jobject obj)
static void SetViewportSettingsFromNative(JNIEnv *env, jobject obj)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
@@ -2329,9 +2303,6 @@ static void SetViewportSettingsFromNative(JNIEnv *env, jobject obj)
static void SetSnapAnchor(JNIEnv *env, jobject obj, jint x, jint y)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
@@ -2340,9 +2311,6 @@ static void SetSnapAnchor(JNIEnv *env, jobject obj, jint x, jint y)
static void SnapToAnchor(JNIEnv *env, jobject obj)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
@@ -2351,9 +2319,6 @@ static void SnapToAnchor(JNIEnv *env, jobject obj)
static void SetBackgroundColor(JNIEnv *env, jobject obj, jint color)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
@@ -2362,9 +2327,6 @@ static void SetBackgroundColor(JNIEnv *env, jobject obj, jint color)
static jstring GetSelection(JNIEnv *env, jobject obj, jobject selRgn)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
SkRegion* selectionRegion = GraphicsJNI::getNativeRegion(env, selRgn);
@@ -2402,44 +2364,29 @@ static void RefreshPlugins(JNIEnv *env,
jobject obj,
jboolean reloadOpenPages)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
// Refresh the list of plugins, optionally reloading all open
// pages.
WebCore::refreshPlugins(reloadOpenPages);
}
static void RegisterURLSchemeAsLocal(JNIEnv* env, jobject obj, jstring scheme) {
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebCore::FrameLoader::registerURLSchemeAsLocal(to_string(env, scheme));
}
static void CheckNavCache(JNIEnv *env, jobject obj)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
viewImpl->checkNavCache();
}
static void ClearContent(JNIEnv *env, jobject obj)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
viewImpl->clearContent();
}
static void CopyContentToPicture(JNIEnv *env, jobject obj, jobject pict)
{
-#ifdef ANDROID_INSTRUMENT
- TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
if (!viewImpl)
return;
@@ -2449,7 +2396,6 @@ static void CopyContentToPicture(JNIEnv *env, jobject obj, jobject pict)
static bool DrawContent(JNIEnv *env, jobject obj, jobject canv, jint color)
{
- // Note: this is called from UI thread, don't count it for WebViewCoreTimeCounter
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
SkCanvas* canvas = GraphicsJNI::getNativeCanvas(env, canv);
return viewImpl->drawContent(canvas, color);
diff --git a/WebKit/android/nav/CacheBuilder.cpp b/WebKit/android/nav/CacheBuilder.cpp
index 9150830..8b31de6 100644
--- a/WebKit/android/nav/CacheBuilder.cpp
+++ b/WebKit/android/nav/CacheBuilder.cpp
@@ -1093,8 +1093,6 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame,
IntRect bounds;
IntRect absBounds;
WTF::Vector<IntRect>* columns = NULL;
- int minimumFocusableWidth = MINIMUM_FOCUSABLE_WIDTH;
- int minimumFocusableHeight = MINIMUM_FOCUSABLE_HEIGHT;
if (isArea) {
HTMLAreaElement* area = static_cast<HTMLAreaElement*>(node);
bounds = getAreaRect(area);
@@ -1226,8 +1224,6 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame,
style->textAlign() == WebCore::RIGHT ||
style->textAlign() == WebCore::WEBKIT_RIGHT;
}
- minimumFocusableWidth += 4;
- minimumFocusableHeight += 4;
}
takesFocus = true;
if (isAnchor) {
@@ -1259,9 +1255,9 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame,
bounds.setLocation(IntPoint(x, y));
bounds.setSize(IntSize(width, height));
}
- if (bounds.width() < minimumFocusableWidth)
+ if (bounds.width() < MINIMUM_FOCUSABLE_WIDTH)
continue;
- if (bounds.height() < minimumFocusableHeight)
+ if (bounds.height() < MINIMUM_FOCUSABLE_HEIGHT)
continue;
bounds.move(globalOffsetX, globalOffsetY);
}
diff --git a/WebKit/android/nav/FindCanvas.cpp b/WebKit/android/nav/FindCanvas.cpp
index 24b0129..61bb07e 100644
--- a/WebKit/android/nav/FindCanvas.cpp
+++ b/WebKit/android/nav/FindCanvas.cpp
@@ -275,15 +275,8 @@ void FindCanvas::findHelper(const void* text, size_t byteLength,
if (mWorkingIndex) {
SkPoint newY;
getTotalMatrix().mapXY(0, y, &newY);
- SkIRect workingBounds = mWorkingRegion.getBounds();
- int newYInt = SkScalarRound(newY.fY);
- if (workingBounds.fTop > newYInt) {
- // The new text is above the working region, so we know it's not
- // a continuation.
- resetWorkingCanvas();
- mWorkingIndex = 0;
- mWorkingRegion.setEmpty();
- } else if (workingBounds.fBottom < newYInt) {
+ SkIRect bounds = mWorkingRegion.getBounds();
+ if (bounds.fBottom < SkScalarRound(newY.fY)) {
// Now we know that this line is lower than our partial match.
SkPaint clonePaint(paint);
clonePaint.setTextEncoding(SkPaint::kUTF8_TextEncoding);
@@ -308,9 +301,6 @@ void FindCanvas::findHelper(const void* text, size_t byteLength,
mWorkingRegion.setEmpty();
}
}
- // If neither one is true, then we are likely continuing on the same
- // line, but are in a new draw call because the paint has changed. In
- // this case, we can continue without adding a space.
}
// j is the position in the search text
// Start off with mWorkingIndex in case we are continuing from a prior call
@@ -406,20 +396,21 @@ void FindCanvas::findHelper(const void* text, size_t byteLength,
// call.
// Keep track of a partial match that may start on this line.
if (j > 0) { // if j is greater than 0, we have a partial match
- int relativeCount = j - mWorkingIndex; // Number of characters in this
- // part of the match.
- int partialIndex = index - relativeCount; // Index that starts our
- // partial match.
+ int partialIndex = index - j + mWorkingIndex;
const uint16_t* partialGlyphs = chars + partialIndex;
- SkRect partial = (this->*addMatch)(partialIndex, paint, relativeCount,
+ SkRect partial = (this->*addMatch)(partialIndex, paint, j,
partialGlyphs, positions, y);
partial.inset(mOutset, mOutset);
+ getTotalMatrix().mapRect(&partial);
SkIRect dest;
partial.roundOut(&dest);
// Only save a partial if it is in the current clip.
if (getTotalClip().contains(dest)) {
mWorkingRegion.op(dest, SkRegion::kUnion_Op);
mWorkingIndex = j;
+ // From one perspective, it seems like we would want to draw here,
+ // since we have all the information (paint, matrix, etc)
+ // However, we only want to draw if we find the rest
return;
}
}