Reviewers: Hannes Payer,

Message:
Hey Hannes,
Here's window.performance.now() as requested. :-)
PTAL
-- Benedikt

Description:
Add window.performance.now() to the d8 shell.

Please review this at https://codereview.chromium.org/32433010/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+34, -11 lines):
  M src/d8.h
  M src/d8.cc
  A + test/mjsunit/d8-performance-now.js
  M test/mjsunit/mjsunit.status


Index: src/d8.cc
diff --git a/src/d8.cc b/src/d8.cc
index 96407a897c98b1284a3f9b1dd78bb457c5b08bd7..0efaeb76af56f18e73ecceb23a898b9351aa2706 100644
--- a/src/d8.cc
+++ b/src/d8.cc
@@ -166,6 +166,7 @@ Persistent<Context> Shell::utility_context_;
 Persistent<Context> Shell::evaluation_context_;
 ShellOptions Shell::options;
 const char* Shell::kPrompt = "d8> ";
+const i::TimeTicks Shell::kInitialTicks = i::TimeTicks::HighResolutionNow();


 const int MB = 1024 * 1024;
@@ -289,6 +290,15 @@ int PerIsolateData::RealmFind(Handle<Context> context) {
 }


+// window.performance.now() returns a time stamp as double, measured in
+// milliseconds.
+void Shell::WindowPerformanceNow(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  i::TimeDelta delta = i::TimeTicks::HighResolutionNow() - kInitialTicks;
+  args.GetReturnValue().Set(delta.InMillisecondsF());
+}
+
+
 // Realm.current() returns the index of the currently active realm.
 void Shell::RealmCurrent(const v8::FunctionCallbackInfo<v8::Value>& args) {
   Isolate* isolate = args.GetIsolate();
@@ -872,6 +882,13 @@ Handle<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) {
                               RealmSharedGet, RealmSharedSet);
   global_template->Set(String::New("Realm"), realm_template);

+  Handle<ObjectTemplate> window_template = ObjectTemplate::New();
+  Handle<ObjectTemplate> performance_template = ObjectTemplate::New();
+  performance_template->Set(String::New("now"),
+                            FunctionTemplate::New(WindowPerformanceNow));
+  window_template->Set(String::New("performance"), performance_template);
+  global_template->Set(String::New("window"), window_template);
+
 #if !defined(V8_SHARED) && !defined(_WIN32) && !defined(_WIN64)
   Handle<ObjectTemplate> os_templ = ObjectTemplate::New();
   AddOSMethods(os_templ);
Index: src/d8.h
diff --git a/src/d8.h b/src/d8.h
index 42013e866d1ef6948ac35ad4e7690d44cf345770..5c7ffaa5bd73ec571a7f603215f0cf3fde2a372f 100644
--- a/src/d8.h
+++ b/src/d8.h
@@ -304,6 +304,8 @@ class Shell : public i::AllStatic {
 #endif  // ENABLE_DEBUGGER_SUPPORT
 #endif  // V8_SHARED

+  static void WindowPerformanceNow(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
static void RealmCurrent(const v8::FunctionCallbackInfo<v8::Value>& args);
   static void RealmOwner(const v8::FunctionCallbackInfo<v8::Value>& args);
   static void RealmGlobal(const v8::FunctionCallbackInfo<v8::Value>& args);
@@ -381,6 +383,7 @@ class Shell : public i::AllStatic {

   static const char* kPrompt;
   static ShellOptions options;
+  static const i::TimeTicks kInitialTicks;

  private:
   static Persistent<Context> evaluation_context_;
Index: test/mjsunit/d8-performance-now.js
diff --git a/test/cctest/test-cpu-ia32.cc b/test/mjsunit/d8-performance-now.js
similarity index 82%
copy from test/cctest/test-cpu-ia32.cc
copy to test/mjsunit/d8-performance-now.js
index 245450bf92b595e417a53edff09a5849d74dd135..090ccefd8e9c62d27afc9a04ef0d7709d2d3789e 100644
--- a/test/cctest/test-cpu-ia32.cc
+++ b/test/mjsunit/d8-performance-now.js
@@ -25,16 +25,15 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-#include "v8.h"
+// Test the window.performance.now() function of d8.  This test only makes
+// sense with d8.

-#include "cctest.h"
-#include "cpu.h"
-
-using namespace v8::internal;
-
-
-TEST(RequiredFeaturesX64) {
-  // Test for the features required by every x86 CPU in compat/legacy mode.
-  CPU cpu;
-  CHECK(cpu.has_sahf());
+var init = window.performance.now();
+var prev = init;
+var date = Date.now();
+while (Date.now() <= date + 15) {
+  var next = window.performance.now();
+  assertTrue(next >= prev);
+  prev = next;
 }
+assertTrue(window.performance.now() > init);
Index: test/mjsunit/mjsunit.status
diff --git a/test/mjsunit/mjsunit.status b/test/mjsunit/mjsunit.status
index a7939d73bb7462b7bc4b1973af20117625c52146..5ba166f83cc2b11a1c0e9d0a3c55b24a9d612aa6 100644
--- a/test/mjsunit/mjsunit.status
+++ b/test/mjsunit/mjsunit.status
@@ -59,6 +59,10 @@
   'regress/regress-crbug-217858': [PASS, ['mode == debug', SKIP]],

##############################################################################
+  # No need to waste time for this test.
+  'd8-performance-now': [PASS, NO_VARIANTS],
+
+ ##############################################################################
   # These use a built-in that's only present in debug mode. They take
   # too long to run in debug mode on ARM and MIPS.
'fuzz-natives-part*': [PASS, ['mode == release or arch == arm or arch == android_arm or arch == mipsel', SKIP]],


--
--
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.

Reply via email to