am 73270d49: am f88d14c1: Cleanspec entry for the old launcher on
Merge commit '73270d49e0716dae7d59b7e0475a53b85f970576'
* commit '73270d49e0716dae7d59b7e0475a53b85f970576':
Cleanspec entry for the old launcher on
diff --git a/cleanspec.mk b/cleanspec.mk
index ff06a56..cfe9743 100644
--- a/cleanspec.mk
+++ b/cleanspec.mk
@@ -79,6 +79,8 @@
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/bin/bugreport)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libwebcore_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libwebcore_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libdvm_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libandroid_runtime_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libwebcore_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libwebcore_intermediates)
$(call add-clean-step, rm -rf $(OUT_DIR)/obj/target/common/obj/APPS/VoiceSearch_intermediates)
diff --git a/core/binary.mk b/core/binary.mk
index 4413d47..d5528b1 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -9,6 +9,15 @@
include $(BUILD_SYSTEM)/base_rules.mk
#######################################
+####################################################
+## Add FDO flags if FDO is turned on and supported
+####################################################
+ifeq ($(strip $(LOCAL_NO_FDO_SUPPORT)),)
+ LOCAL_CFLAGS += $(TARGET_FDO_CFLAGS)
+ LOCAL_CPPFLAGS += $(TARGET_FDO_CFLAGS)
+ LOCAL_LDFLAGS += $(TARGET_FDO_CFLAGS)
+endif
+
###########################################################
## Define PRIVATE_ variables used by multiple module types
###########################################################
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index a7eba3f..99d7eb0 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -33,6 +33,7 @@
LOCAL_CXX:=
LOCAL_CPP_EXTENSION:=
LOCAL_NO_DEFAULT_COMPILER_FLAGS:=
+LOCAL_NO_FDO_SUPPORT :=
LOCAL_ARM_MODE:=
LOCAL_YACCFLAGS:=
LOCAL_ASFLAGS:=
diff --git a/core/combo/darwin-x86.mk b/core/combo/darwin-x86.mk
index 2150960..47f5ccd 100644
--- a/core/combo/darwin-x86.mk
+++ b/core/combo/darwin-x86.mk
@@ -29,6 +29,7 @@
-o $@ \
$(PRIVATE_LDFLAGS) \
$(if $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES),-all_load) \
+ $(TARGET_FDO_LIB) \
$(TARGET_LIBGCC)
endef
@@ -42,6 +43,7 @@
$(PRIVATE_LDLIBS) \
$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
+ $(TARGET_FDO_LIB) \
$(TARGET_LIBGCC)
endef
@@ -55,6 +57,7 @@
$(PRIVATE_LDLIBS) \
$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
+ $(TARGET_FDO_LIB) \
$(TARGET_LIBGCC)
endef
@@ -94,4 +97,3 @@
endef
endif
-
diff --git a/core/combo/linux-arm.mk b/core/combo/linux-arm.mk
index 6011351..44d3540 100644
--- a/core/combo/linux-arm.mk
+++ b/core/combo/linux-arm.mk
@@ -135,6 +135,37 @@
$(combo_target)LIBGCC := $(shell $($(combo_target)CC) $($(combo_target)GLOBAL_CFLAGS) -print-libgcc-file-name)
endif
+# Define FDO (Feedback Directed Optimization) options.
+
+TARGET_FDO_CFLAGS:=
+TARGET_FDO_LIB:=
+
+target_libgcov := $(shell $($(combo_target)CC) $($(combo_target)GLOBAL_CFLAGS) \
+ --print-file-name=libgcov.a)
+ifneq ($(strip $(BUILD_FDO_INSTRUMENT)),)
+ # Set BUILD_FDO_INSTRUMENT=true to turn on FDO instrumentation.
+ # The profile will be generated on /data/local/tmp/profile on the device.
+ TARGET_FDO_CFLAGS := -fprofile-generate=/data/local/tmp/profile -DANDROID_FDO
+ TARGET_FDO_LIB := $(target_libgcov)
+else
+ # If BUILD_FDO_INSTRUMENT is turned off, then consider doing the FDO optimizations.
+ # Set TARGET_FDO_PROFILE_PATH to set a custom profile directory for your build.
+ ifeq ($(strip $(TARGET_FDO_PROFILE_PATH)),)
+ TARGET_FDO_PROFILE_PATH := fdo/profiles/$(TARGET_ARCH)/$(TARGET_ARCH_VARIANT)
+ else
+ ifeq ($(strip $(wildcard $(TARGET_FDO_PROFILE_PATH))),)
+ $(warning Custom TARGET_FDO_PROFILE_PATH supplied, but directory does not exist. Turn off FDO.)
+ endif
+ endif
+
+ # If the FDO profile directory can't be found, then FDO is off.
+ ifneq ($(strip $(wildcard $(TARGET_FDO_PROFILE_PATH))),)
+ TARGET_FDO_CFLAGS := -fprofile-use=$(TARGET_FDO_PROFILE_PATH) -DANDROID_FDO
+ TARGET_FDO_LIB := $(target_libgcov)
+ endif
+endif
+
+
# unless CUSTOM_KERNEL_HEADERS is defined, we're going to use
# symlinks located in out/ to point to the appropriate kernel
# headers. see 'config/kernel_headers.make' for more details
@@ -166,6 +197,10 @@
$(combo_target)DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libstdc++ libm
$(combo_target)CUSTOM_LD_COMMAND := true
+
+# Enable the Dalvik JIT compiler
+WITH_JIT := true
+
define transform-o-to-shared-lib-inner
$(TARGET_CXX) \
-nostdlib -Wl,-soname,$(notdir $@) -Wl,-T,$(BUILD_SYSTEM)/armelf.xsc \
@@ -181,6 +216,7 @@
-o $@ \
$(PRIVATE_LDFLAGS) \
$(TARGET_GLOBAL_LDFLAGS) \
+ $(TARGET_FDO_LIB) \
$(TARGET_LIBGCC)
endef
@@ -198,6 +234,7 @@
$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
$(PRIVATE_LDFLAGS) \
$(TARGET_GLOBAL_LDFLAGS) \
+ $(TARGET_FDO_LIB) \
$(TARGET_LIBGCC) \
$(TARGET_CRTEND_O)
endef
@@ -212,6 +249,7 @@
$(TARGET_GLOBAL_LDFLAGS) \
$(PRIVATE_ALL_OBJECTS) \
$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
+ $(TARGET_FDO_LIB) \
$(TARGET_LIBGCC) \
$(TARGET_CRTEND_O)
endef
diff --git a/core/dynamic_binary.mk b/core/dynamic_binary.mk
index f07cf2a..0818d87 100644
--- a/core/dynamic_binary.mk
+++ b/core/dynamic_binary.mk
@@ -91,6 +91,13 @@
# around, so we have to use this version.
prelink_output := $(LOCAL_UNSTRIPPED_PATH)/$(LOCAL_MODULE_SUBDIR)$(LOCAL_BUILT_MODULE_STEM)
+# Skip prelinker if it is FDO instrumentation build.
+ifneq ($(strip $(BUILD_FDO_INSTRUMENT)),)
+ifneq ($(LOCAL_NO_FDO_SUPPORT),true)
+LOCAL_PRELINK_MODULE := false
+endif
+endif
+
ifeq ($(LOCAL_PRELINK_MODULE),true)
$(prelink_output): $(prelink_input) $(TARGET_PRELINKER_MAP) $(APRIORI)
$(transform-to-prelinked)
diff --git a/tools/adbs b/tools/adbs
index 8b1fac6..815ae10 100755
--- a/tools/adbs
+++ b/tools/adbs
@@ -217,6 +217,7 @@
SymbolTranslation(groups)
else:
print line
+ sys.stdout.flush()
# adb itself aborts
stream.close()
diff --git a/tools/apicheck/src/com/android/apicheck/ClassInfo.java b/tools/apicheck/src/com/android/apicheck/ClassInfo.java
index 5405ad2..d4416f4 100644
--- a/tools/apicheck/src/com/android/apicheck/ClassInfo.java
+++ b/tools/apicheck/src/com/android/apicheck/ClassInfo.java
@@ -121,7 +121,11 @@
consistent = false;
}
for (String iface : mInterfaces) {
- if (!cl.mInterfaces.contains(iface)) {
+ boolean found = false;
+ for (ClassInfo c = cl; c != null && !found; c = c.mSuperClass) {
+ found = c.mInterfaces.contains(iface);
+ }
+ if (!found) {
Errors.error(Errors.REMOVED_INTERFACE, cl.position(),
"Class " + qualifiedName() + " no longer implements " + iface);
}
diff --git a/tools/droiddoc/src/MethodInfo.java b/tools/droiddoc/src/MethodInfo.java
index 3211038..7f96b80 100644
--- a/tools/droiddoc/src/MethodInfo.java
+++ b/tools/droiddoc/src/MethodInfo.java
@@ -363,8 +363,17 @@
public String getHashableName() {
StringBuilder result = new StringBuilder();
result.append(name());
- for (ParameterInfo pInfo : mParameters) {
- result.append(":").append(pInfo.type().fullName());
+ for (int p = 0; p < mParameters.length; p++) {
+ result.append(":");
+ if (p == mParameters.length - 1 && isVarArgs()) {
+ // TODO: note that this does not attempt to handle hypothetical
+ // vararg methods whose last parameter is a list of arrays, e.g.
+ // "Object[]...".
+ result.append(mParameters[p].type().fullNameNoDimension(typeVariables()))
+ .append("...");
+ } else {
+ result.append(mParameters[p].type().fullName(typeVariables()));
+ }
}
return result.toString();
}
diff --git a/tools/droiddoc/src/SinceTagger.java b/tools/droiddoc/src/SinceTagger.java
index fb69c04..a1bce55 100644
--- a/tools/droiddoc/src/SinceTagger.java
+++ b/tools/droiddoc/src/SinceTagger.java
@@ -1,8 +1,13 @@
// Copyright 2009 Google Inc. All Rights Reserved.
-import com.android.apicheck.*;
+import com.android.apicheck.ApiCheck;
+import com.android.apicheck.ApiInfo;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Collections;
import org.clearsilver.HDF;
@@ -165,31 +170,68 @@
*/
private void warnForMissingVersions(ClassInfo[] classDocs) {
for (ClassInfo claz : classDocs) {
+ if (!checkLevelRecursive(claz)) {
+ continue;
+ }
+
if (claz.getSince() == null) {
Errors.error(Errors.NO_SINCE_DATA, claz.position(),
"XML missing class " + claz.qualifiedName());
}
- for (FieldInfo field : claz.fields()) {
- if (field.getSince() == null) {
- Errors.error(Errors.NO_SINCE_DATA, field.position(),
- "XML missing field "
- + claz.qualifiedName() + "#" + field .name());
- }
+
+ for (FieldInfo field : missingVersions(claz.fields())) {
+ Errors.error(Errors.NO_SINCE_DATA, field.position(),
+ "XML missing field " + claz.qualifiedName()
+ + "#" + field.name());
}
- for (MethodInfo constructor : claz.constructors()) {
- if (constructor.getSince() == null) {
- Errors.error(Errors.NO_SINCE_DATA, constructor.position(),
- "XML missing constructor "
- + claz.qualifiedName() + "#" + constructor.getHashableName());
- }
+
+ for (MethodInfo constructor : missingVersions(claz.constructors())) {
+ Errors.error(Errors.NO_SINCE_DATA, constructor.position(),
+ "XML missing constructor " + claz.qualifiedName()
+ + "#" + constructor.getHashableName());
}
- for (MethodInfo method : claz.methods()) {
- if (method.getSince() == null) {
- Errors.error(Errors.NO_SINCE_DATA, method.position(),
- "XML missing method "
- + claz.qualifiedName() + "#" + method .getHashableName());
- }
+
+ for (MethodInfo method : missingVersions(claz.methods())) {
+ Errors.error(Errors.NO_SINCE_DATA, method.position(),
+ "XML missing method " + claz.qualifiedName()
+ + "#" + method.getHashableName());
}
}
}
+
+ /**
+ * Returns the DocInfos in {@code all} that are documented but do not have
+ * since tags.
+ */
+ private <T extends MemberInfo> Iterable<T> missingVersions(T[] all) {
+ List<T> result = Collections.emptyList();
+ for (T t : all) {
+ // if this member has version info or isn't documented, skip it
+ if (t.getSince() != null
+ || t.isHidden()
+ || !checkLevelRecursive(t.realContainingClass())) {
+ continue;
+ }
+
+ if (result.isEmpty()) {
+ result = new ArrayList<T>(); // lazily construct a mutable list
+ }
+ result.add(t);
+ }
+ return result;
+ }
+
+ /**
+ * Returns true if {@code claz} and all containing classes are documented.
+ * The result may be used to filter out members that exist in the API
+ * data structure but aren't a part of the API.
+ */
+ private boolean checkLevelRecursive(ClassInfo claz) {
+ for (ClassInfo c = claz; c != null; c = c.containingClass()) {
+ if (!c.checkLevel()) {
+ return false;
+ }
+ }
+ return true;
+ }
}