Revision: 18317
Author: [email protected]
Date: Tue Dec 17 07:57:53 2013 UTC
Log: Version 3.24.2
Flush instruction cache for deserialized code objects.
Performance and stability improvements on all platforms.
http://code.google.com/p/v8/source/detail?r=18317
Modified:
/trunk/ChangeLog
/trunk/Makefile.android
/trunk/Makefile.nacl
/trunk/src/serialize.cc
/trunk/src/serialize.h
/trunk/src/version.cc
/trunk/tools/push-to-trunk/auto_roll.py
/trunk/tools/push-to-trunk/common_includes.py
/trunk/tools/push-to-trunk/push_to_trunk.py
/trunk/tools/push-to-trunk/test_scripts.py
=======================================
--- /trunk/ChangeLog Fri Dec 13 15:13:40 2013 UTC
+++ /trunk/ChangeLog Tue Dec 17 07:57:53 2013 UTC
@@ -1,3 +1,10 @@
+2013-12-17: Version 3.24.2
+
+ Flush instruction cache for deserialized code objects.
+
+ Performance and stability improvements on all platforms.
+
+
2013-12-13: Version 3.24.1
Fix polymorphic inlined calls with migrating prototypes.
=======================================
--- /trunk/Makefile.android Mon Jul 22 09:21:20 2013 UTC
+++ /trunk/Makefile.android Tue Dec 17 07:57:53 2013 UTC
@@ -48,7 +48,7 @@
ifeq ($(ARCH), android_arm)
DEFINES = target_arch=arm v8_target_arch=arm android_target_arch=arm
- DEFINES += arm_neon=0 armv7=1
+ DEFINES += arm_neon=0 arm_version=7
TOOLCHAIN_ARCH = arm-linux-androideabi-4.6
else
ifeq ($(ARCH), android_mipsel)
@@ -77,8 +77,8 @@
DEFINES += host_os=${HOST_OS}
.SECONDEXPANSION:
-$(ANDROID_BUILDS): $(OUTDIR)/Makefile.$$(basename $$@)
- @$(MAKE) -C "$(OUTDIR)" -f Makefile.$(basename $@) \
+$(ANDROID_BUILDS): $(OUTDIR)/Makefile.$$@
+ @$(MAKE) -C "$(OUTDIR)" -f Makefile.$@ \
CXX="$(ANDROID_TOOLCHAIN)/bin/*-g++" \
AR="$(ANDROID_TOOLCHAIN)/bin/*-ar" \
RANLIB="$(ANDROID_TOOLCHAIN)/bin/*-ranlib" \
@@ -90,13 +90,13 @@
builddir="$(shell pwd)/$(OUTDIR)/$@"
# Android GYP file generation targets.
-ANDROID_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(ANDROID_ARCHES))
+ANDROID_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(ANDROID_BUILDS))
$(ANDROID_MAKEFILES):
- @GYP_GENERATORS=make-android \
+ GYP_GENERATORS=make-android \
GYP_DEFINES="${DEFINES}" \
CC="${ANDROID_TOOLCHAIN}/bin/*-gcc" \
CXX="${ANDROID_TOOLCHAIN}/bin/*-g++" \
PYTHONPATH="$(shell pwd)/tools/generate_shim_headers:$(PYTHONPATH)" \
build/gyp/gyp --generator-output="${OUTDIR}" build/all.gyp \
-Ibuild/standalone.gypi --depth=. -Ibuild/android.gypi \
- -S.${ARCH} ${GYPFLAGS}
+ -S$(suffix $(basename $@))$(suffix $@) ${GYPFLAGS}
=======================================
--- /trunk/Makefile.nacl Mon Sep 23 14:09:36 2013 UTC
+++ /trunk/Makefile.nacl Tue Dec 17 07:57:53 2013 UTC
@@ -77,11 +77,11 @@
# ICU doesn't support NaCl.
GYPENV += v8_enable_i18n_support=0
-NACL_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(NACL_ARCHES))
+NACL_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(NACL_BUILDS))
.SECONDEXPANSION:
# For some reason the $$(basename $$@) expansion didn't work here...
$(NACL_BUILDS): $(NACL_MAKEFILES)
- @$(MAKE) -C "$(OUTDIR)" -f Makefile.$(basename $@) \
+ @$(MAKE) -C "$(OUTDIR)" -f Makefile.$@ \
CXX=${NACL_CXX} \
LINK=${NACL_LINK} \
BUILDTYPE=$(shell echo $(subst .,,$(suffix $@)) | \
@@ -90,12 +90,12 @@
# NACL GYP file generation targets.
$(NACL_MAKEFILES):
- @GYP_GENERATORS=make \
+ GYP_GENERATORS=make \
GYP_DEFINES="${GYPENV}" \
CC=${NACL_CC} \
CXX=${NACL_CXX} \
PYTHONPATH="$(shell pwd)/tools/generate_shim_headers:$(PYTHONPATH)" \
build/gyp/gyp --generator-output="${OUTDIR}" build/all.gyp \
-Ibuild/standalone.gypi --depth=. \
- -S.$(subst .,,$(suffix $@)) $(GYPFLAGS) \
+ -S$(suffix $(basename $@))$(suffix $@) $(GYPFLAGS) \
-Dwno_array_bounds=-Wno-array-bounds
=======================================
--- /trunk/src/serialize.cc Mon Nov 25 12:01:13 2013 UTC
+++ /trunk/src/serialize.cc Tue Dec 17 07:57:53 2013 UTC
@@ -792,6 +792,15 @@
reservations_[i] = kUninitializedReservation;
}
}
+
+
+void Deserializer::FlushICacheForNewCodeObjects() {
+ PageIterator it(isolate_->heap()->code_space());
+ while (it.has_next()) {
+ Page* p = it.next();
+ CPU::FlushICache(p->area_start(), p->area_end() - p->area_start());
+ }
+}
void Deserializer::Deserialize(Isolate* isolate) {
@@ -829,6 +838,8 @@
ExternalAsciiString::cast(source)->update_data_cache();
}
}
+
+ FlushICacheForNewCodeObjects();
// Issue code events for newly deserialized code objects.
LOG_CODE_EVENT(isolate_, LogCodeObjects());
=======================================
--- /trunk/src/serialize.h Fri Nov 29 11:43:20 2013 UTC
+++ /trunk/src/serialize.h Tue Dec 17 07:57:53 2013 UTC
@@ -377,6 +377,7 @@
return HeapObject::FromAddress(high_water_[space] - offset);
}
+ void FlushICacheForNewCodeObjects();
// Cached current isolate.
Isolate* isolate_;
=======================================
--- /trunk/src/version.cc Fri Dec 13 15:13:40 2013 UTC
+++ /trunk/src/version.cc Tue Dec 17 07:57:53 2013 UTC
@@ -34,7 +34,7 @@
// system so their names cannot be changed without changing the scripts.
#define MAJOR_VERSION 3
#define MINOR_VERSION 24
-#define BUILD_NUMBER 1
+#define BUILD_NUMBER 2
#define PATCH_LEVEL 0
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
=======================================
--- /trunk/tools/push-to-trunk/auto_roll.py Fri Dec 13 15:13:40 2013 UTC
+++ /trunk/tools/push-to-trunk/auto_roll.py Tue Dec 17 07:57:53 2013 UTC
@@ -36,6 +36,12 @@
PERSISTFILE_BASENAME: "/tmp/v8-auto-roll-tempfile",
DOT_GIT_LOCATION: ".git",
}
+
+
+class AutoRollOptions(CommonOptions):
+ def __init__(self, options):
+ super(AutoRollOptions, self).__init__(options)
+ self.requires_editor = False
class Preparation(Step):
@@ -137,7 +143,7 @@
print "You need to specify the chromium src location and a reviewer."
parser.print_help()
return 1
- RunAutoRoll(CONFIG, options)
+ RunAutoRoll(CONFIG, AutoRollOptions(options))
if __name__ == "__main__":
sys.exit(Main())
=======================================
--- /trunk/tools/push-to-trunk/common_includes.py Wed Dec 4 09:42:52 2013
UTC
+++ /trunk/tools/push-to-trunk/common_includes.py Tue Dec 17 07:57:53 2013
UTC
@@ -212,6 +212,19 @@
DEFAULT_SIDE_EFFECT_HANDLER = SideEffectHandler()
+class NoRetryException(Exception):
+ pass
+
+class CommonOptions(object):
+ def __init__(self, options, manual=True):
+ self.requires_editor = True
+ self.wait_for_lgtm = True
+ self.s = options.s
+ self.force_readline_defaults = not manual
+ self.force_upload = not manual
+ self.manual = manual
+
+
class Step(object):
def __init__(self, text, requires, number, config, state, options,
handler):
self._text = text
@@ -225,16 +238,11 @@
assert self._config is not None
assert self._state is not None
assert self._side_effect_handler is not None
+ assert isinstance(options, CommonOptions)
def Config(self, key):
return self._config[key]
- def IsForced(self):
- return self._options and self._options.f
-
- def IsManual(self):
- return self._options and self._options.m
-
def Run(self):
if self._requires:
self.RestoreIfUnset(self._requires)
@@ -263,6 +271,8 @@
got_exception = False
try:
result = cb()
+ except NoRetryException, e:
+ raise e
except Exception:
got_exception = True
if got_exception or retry_on(result):
@@ -277,7 +287,7 @@
def ReadLine(self, default=None):
# Don't prompt in forced mode.
- if not self.IsManual() and default is not None:
+ if self._options.force_readline_defaults and default is not None:
print "%s (forced)" % default
return default
else:
@@ -288,7 +298,7 @@
return self.Retry(cmd, retry_on, [5, 30])
def Editor(self, args):
- if not self.IsForced():
+ if self._options.requires_editor:
return self._side_effect_handler.Command(os.environ["EDITOR"], args,
pipe=False)
@@ -307,7 +317,7 @@
raise Exception(msg)
def DieNoManualMode(self, msg=""):
- if not self.IsManual():
+ if not self._options.manual:
msg = msg or "Only available in manual mode."
self.Die(msg)
@@ -348,7 +358,7 @@
self.Die("This is not a git checkout, this script won't work for
you.")
# Cancel if EDITOR is unset or not executable.
- if (not self.IsForced() and (not os.environ.get("EDITOR") or
+ if (self._options.requires_editor and (not os.environ.get("EDITOR") or
Command("which", os.environ["EDITOR"]) is None)):
self.Die("Please set your EDITOR environment variable, you'll need
it.")
@@ -418,7 +428,7 @@
answer = ""
while answer != "LGTM":
print "> ",
- answer = self.ReadLine("LGTM" if self.IsForced() else None)
+ answer = self.ReadLine(None if self._options.wait_for_lgtm
else "LGTM")
if answer != "LGTM":
print "That was not 'LGTM'."
@@ -454,7 +464,7 @@
print "Please enter the email address of a V8 reviewer for your
patch: ",
self.DieNoManualMode("A reviewer must be specified in forced mode.")
reviewer = self.ReadLine()
- force_flag = " -f" if not self.IsManual() else ""
+ force_flag = " -f" if self._options.force_upload else ""
args = "cl upload -r \"%s\" --send-mail%s" % (reviewer, force_flag)
# TODO(machenbach): Check output in forced mode. Verify that all
required
# base files were uploaded, if not retry.
=======================================
--- /trunk/tools/push-to-trunk/push_to_trunk.py Fri Dec 13 15:13:40 2013 UTC
+++ /trunk/tools/push-to-trunk/push_to_trunk.py Tue Dec 17 07:57:53 2013 UTC
@@ -52,6 +52,16 @@
}
+class PushToTrunkOptions(CommonOptions):
+ def __init__(self, options):
+ super(PushToTrunkOptions, self).__init__(options, options.m)
+ self.requires_editor = not options.f
+ self.wait_for_lgtm = not options.f
+ self.tbr_commit = not options.m
+ self.l = options.l
+ self.r = options.r
+ self.c = options.c
+
class Preparation(Step):
MESSAGE = "Preparation."
@@ -214,7 +224,7 @@
# Include optional TBR only in the git command. The persisted commit
# message is used for finding the commit again later.
- review = "\n\nTBR=%s" % self._options.r if not self.IsManual() else ""
+ review = "\n\nTBR=%s" % self._options.r if self._options.tbr_commit
else ""
if self.Git("commit -a -m \"%s%s\"" % (prep_commit_msg, review)) is
None:
self.Die("'git commit -a' failed.")
@@ -441,7 +451,7 @@
ver = "%s.%s.%s" % (self._state["major"],
self._state["minor"],
self._state["build"])
- if self._options and self._options.r:
+ if self._options.r:
print "Using account %s for review." % self._options.r
rev = self._options.r
else:
@@ -451,7 +461,7 @@
args = "commit -am \"Update V8 to version %s.\n\nTBR=%s\"" % (ver, rev)
if self.Git(args) is None:
self.Die("'git commit' failed.")
- force_flag = " -f" if not self.IsManual() else ""
+ force_flag = " -f" if self._options.force_upload else ""
if self.Git("cl upload --send-mail%s" % force_flag, pipe=False) is
None:
self.Die("'git cl upload' failed, please try again.")
print "CL uploaded."
@@ -569,7 +579,7 @@
if not ProcessOptions(options):
parser.print_help()
return 1
- RunPushToTrunk(CONFIG, options)
+ RunPushToTrunk(CONFIG, PushToTrunkOptions(options))
if __name__ == "__main__":
sys.exit(Main())
=======================================
--- /trunk/tools/push-to-trunk/test_scripts.py Fri Dec 13 15:13:40 2013 UTC
+++ /trunk/tools/push-to-trunk/test_scripts.py Tue Dec 17 07:57:53 2013 UTC
@@ -35,8 +35,9 @@
import push_to_trunk
from push_to_trunk import *
import auto_roll
+from auto_roll import AutoRollOptions
+from auto_roll import CheckLastPush
from auto_roll import FetchLatestRevision
-from auto_roll import CheckLastPush
TEST_CONFIG = {
@@ -230,14 +231,14 @@
# The number of arguments in the expectation must match the actual
# arguments.
if len(args) > len(expected_call):
- raise Exception("When calling %s with arguments, the expectations "
- "must consist of at least as many arguments.")
+ raise NoRetryException("When calling %s with arguments, the "
+ "expectations must consist of at least as many arguments.")
# Compare expected and actual arguments.
for (expected_arg, actual_arg) in zip(expected_call, args):
if expected_arg != actual_arg:
- raise Exception("Expected: %s - Actual: %s"
- % (expected_arg, actual_arg))
+ raise NoRetryException("Expected: %s - Actual: %s"
+ % (expected_arg, actual_arg))
# The expectation list contains a mandatory return value and an
optional
# callback for checking the context at the time of the call.
@@ -252,8 +253,8 @@
def AssertFinished(self):
if self._index < len(self._recipe) -1:
- raise Exception("Called %s too seldom: %d vs. %d"
- % (self._name, self._index, len(self._recipe)))
+ raise NoRetryException("Called %s too seldom: %d vs. %d"
+ % (self._name, self._index,
len(self._recipe)))
class ScriptTest(unittest.TestCase):
@@ -278,7 +279,7 @@
def MakeStep(self, step_class=Step, state=None, options=None):
"""Convenience wrapper."""
- options = options or MakeOptions()
+ options = options or CommonOptions(MakeOptions())
return MakeStep(step_class=step_class, number=0, state=state,
config=TEST_CONFIG, options=options,
side_effect_handler=self)
@@ -710,7 +711,7 @@
options = MakeOptions(f=force, m=manual,
r="[email protected]" if not manual else
None,
c = TEST_CONFIG[CHROMIUM])
- RunPushToTrunk(TEST_CONFIG, options, self)
+ RunPushToTrunk(TEST_CONFIG, PushToTrunkOptions(options), self)
deps = FileToText(TEST_CONFIG[DEPS_FILE])
self.assertTrue(re.search("\"v8_revision\": \"123456\"", deps))
@@ -759,7 +760,9 @@
["svn log -1 --oneline ChangeLog", "r65 | Prepare push to trunk..."],
])
- auto_roll.RunAutoRoll(TEST_CONFIG, MakeOptions(m=False, f=True), self)
+ auto_roll.RunAutoRoll(TEST_CONFIG,
+ AutoRollOptions(MakeOptions(m=False, f=True)),
+ self)
self.assertEquals("100", self.MakeStep().Restore("lkgr"))
self.assertEquals("101", self.MakeStep().Restore("latest"))
@@ -768,7 +771,7 @@
class SystemTest(unittest.TestCase):
def testReload(self):
step = MakeStep(step_class=PrepareChangeLog, number=0, state={},
config={},
- options=None,
+ options=CommonOptions(MakeOptions()),
side_effect_handler=DEFAULT_SIDE_EFFECT_HANDLER)
body = step.Reload(
"""------------------------------------------------------------------------
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.