Author: [EMAIL PROTECTED]
Date: Thu Nov 13 12:07:43 2008
New Revision: 4058
Modified:
branches/1_6_clean_events/user/src/com/google/gwt/event/shared/HandlerManager.java
Log:
Removing JsHandlerRegistry while we do benchmarks in the background to
determine if we need it.
Modified:
branches/1_6_clean_events/user/src/com/google/gwt/event/shared/HandlerManager.java
==============================================================================
---
branches/1_6_clean_events/user/src/com/google/gwt/event/shared/HandlerManager.java
(original)
+++
branches/1_6_clean_events/user/src/com/google/gwt/event/shared/HandlerManager.java
Thu Nov 13 12:07:43 2008
@@ -15,8 +15,6 @@
*/
package com.google.gwt.event.shared;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.event.shared.GwtEvent.Type;
import com.google.gwt.user.client.Command;
@@ -83,182 +81,10 @@
}
}
- /**
- * Default JavaScript handler registry. This is in the shared class but
should
- * never be called outside of a GWT runtime environment.
- *
- * The JsHandlerRegistry makes use of the fact that in the large
majority of
- * cases, only one or two handlers are added for each event type.
Therefore,
- * rather than storing handlers in a list of lists, we store then in a
single
- * flattened array with an escape clause to handle the rare case where
we have
- * more handlers then expected.
- */
- private static class JsHandlerRegistry extends JavaScriptObject {
-
- /**
- * Required constructor.
- */
- protected JsHandlerRegistry() {
- }
-
- public final <H extends EventHandler> void addHandler(
- Type<H> type, H myHandler) {
-
- // The base is the equivalent to a c pointer into the flattened
handler
- // data structure.
- int base = type.hashCode();
- int count = getCount(base);
- boolean flattened = isFlattened(base);
- H handler = myHandler;
- // If we already have the maximum number of handlers we can store in
the
- // flattened data structure, store the handlers in an external list
- // instead.
- if ((count == EXPECTED_HANDLERS) & flattened) {
- unflatten(base);
- flattened = false;
- }
- if (flattened) {
- setFlatHandler(base, count, handler);
- } else {
- setHandler(base, count, handler);
- }
- setCount(base, count + 1);
- }
-
- public final <H extends EventHandler> void fireEvent(GwtEvent<H>
event) {
- Type<H> type = event.getAssociatedType();
- int base = type.hashCode();
- int count = getCount(base);
- boolean isFlattened = isFlattened(base);
- if (isFlattened) {
- for (int i = 0; i < count; i++) {
- // Gets the given handler to fire.
- H handler = getFlatHandler(base, i);
- // Fires the handler.
- event.dispatch(handler);
- }
- } else {
- JavaScriptObject handlers = getHandlers(base);
- for (int i = 0; i < count; i++) {
- // Gets the given handler to fire.
-
- H handler = getHandler(handlers, i);
-
- // Fires the handler.
- event.dispatch(handler);
- }
- }
- }
-
- public final <H extends EventHandler> H getHandler(GwtEvent.Type<H>
type,
- int index) {
- int base = type.hashCode();
- int count = getCount(base);
- if (index >= count) {
- throw new IndexOutOfBoundsException("index: " + index);
- }
- return getHandler(base, index, isFlattened(base));
- }
-
- public final int getHandlerCount(GwtEvent.Type<?> eventKey) {
- return getCount(eventKey.hashCode());
- }
-
- public final <H> void removeHandler(GwtEvent.Type<H> eventKey,
- EventHandler handler) {
- int base = eventKey.hashCode();
-
- // Removing a handler is unusual, so smaller code is preferable to
- // handling both flat and dangling list of pointers.
- if (isFlattened(base)) {
- unflatten(base);
- }
- boolean result = removeHelper(base, handler);
- // Hiding this behind an assertion as we'd rather not force the
compiler
- // to have to include all handler.toString() instances.
- assert result : handler + " did not exist";
- }
-
- private native int getCount(int index) /*-{
- var count = this[index];
- return count == null? 0:count;
- }-*/;
-
- private native <H extends EventHandler> H getFlatHandler(int base, int
index) /*-{
- return this[base + 2 + index];
- }-*/;
-
- private native <H extends EventHandler> H getHandler(int base, int
index,
- boolean flattened) /*-{
- return flattened? this[base + 2 + index]: this[base + 1][index];
- }-*/;
-
- private native <H extends EventHandler> H getHandler(
- JavaScriptObject handlers, int index) /*-{
- return handlers[index];
- }-*/;
-
- private native JavaScriptObject getHandlers(int base) /*-{
- return this[base + 1];
- }-*/;
-
- private native boolean isFlattened(int base) /*-{
- return this[base + 1] == null;
- }-*/;
-
- private native boolean removeHelper(int base, EventHandler handler)
/*-{
- // Find the handler.
- var count = this[base];
- var handlerList = this[base + 1];
- var handlerIndex = -1;
- for(var index = 0; index < count; index++){
- if(handlerList[index] == handler){
- handlerIndex = index;
- break;
- }
- }
- if(handlerIndex == -1) {
- return false;
- }
-
- // Remove the handler.
- var last = count -1;
- for(; handlerIndex < last; handlerIndex++){
- handlerList[handlerIndex] = handlerList[handlerIndex+1]
- }
- handlerList[last] = null;
- this[base] = this[base]-1;
- return true;
- }-*/;
-
- private native void setCount(int index, int count) /*-{
- this[index] = count;
- }-*/;
-
- private native void setFlatHandler(int base, int index, EventHandler
handler) /*-{
- this[base + 2 + index] = handler;
- }-*/;
-
- private native void setHandler(int base, int index, EventHandler
handler) /*-{
- this[base + 1][index] = handler;
- }-*/;
-
- private native void unflatten(int base) /*-{
- var handlerList = {};
- var count = this[base];
- var start = base + 2;
- for(var i = 0; i < count;i++){
- handlerList[i] = this[start + i];
- this[start + i] = null;
- }
- this[base + 1] = handlerList;
- }-*/;
- }
-
// Used to optimize the JavaScript handler container structure.
private static int EXPECTED_HANDLERS = 5;
- private static final boolean useJs = GWT.isClient();
+ private static final boolean useJs = false;
private static int index;
@@ -272,9 +98,10 @@
}
private int firingDepth = 0;
- // Only one of JsHandlerRegistry and JavaHandlerRegistry are live at
once.
- private JsHandlerRegistry javaScriptRegistry;
+ // Only JavaHandlerRegistry is supported for now as we need to decide if
we
+ // need the more complicated js structure or not.
private JavaHandlerRegistry javaRegistry;
+ private JavaHandlerRegistry javaScriptRegistry;
// source of the event.
private final Object source;
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---