OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/compiler-dispatcher/compiler-dispatcher.h" | 5 #include "src/compiler-dispatcher/compiler-dispatcher.h" |
6 | 6 |
7 #include "include/v8-platform.h" | 7 #include "include/v8-platform.h" |
8 #include "src/base/platform/semaphore.h" | 8 #include "src/base/platform/semaphore.h" |
9 #include "src/compiler-dispatcher/compiler-dispatcher-job.h" | 9 #include "src/compiler-dispatcher/compiler-dispatcher-job.h" |
10 #include "src/compiler-dispatcher/compiler-dispatcher-tracer.h" | 10 #include "src/compiler-dispatcher/compiler-dispatcher-tracer.h" |
(...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
808 TEST_F(CompilerDispatcherTest, EnqueueParsed) { | 808 TEST_F(CompilerDispatcherTest, EnqueueParsed) { |
809 MockPlatform platform; | 809 MockPlatform platform; |
810 CompilerDispatcher dispatcher(i_isolate(), &platform, FLAG_stack_size); | 810 CompilerDispatcher dispatcher(i_isolate(), &platform, FLAG_stack_size); |
811 | 811 |
812 const char script[] = | 812 const char script[] = |
813 "function g() { var y = 1; function f17(x) { return x * y }; return f17; " | 813 "function g() { var y = 1; function f17(x) { return x * y }; return f17; " |
814 "} g();"; | 814 "} g();"; |
815 Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), script)); | 815 Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), script)); |
816 Handle<SharedFunctionInfo> shared(f->shared(), i_isolate()); | 816 Handle<SharedFunctionInfo> shared(f->shared(), i_isolate()); |
817 | 817 |
818 Zone zone(i_isolate()->allocator(), ZONE_NAME); | 818 ParseInfo parse_info(shared); |
819 ParseInfo parse_info(&zone, shared); | |
820 ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info)); | 819 ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info)); |
821 | 820 |
822 ASSERT_FALSE(dispatcher.IsEnqueued(shared)); | 821 ASSERT_FALSE(dispatcher.IsEnqueued(shared)); |
823 ASSERT_TRUE(dispatcher.Enqueue(shared, parse_info.literal())); | 822 ASSERT_TRUE(dispatcher.Enqueue(shared, parse_info.literal())); |
824 ASSERT_TRUE(dispatcher.IsEnqueued(shared)); | 823 ASSERT_TRUE(dispatcher.IsEnqueued(shared)); |
825 | 824 |
826 ASSERT_TRUE(dispatcher.jobs_.begin()->second->status() == | 825 ASSERT_TRUE(dispatcher.jobs_.begin()->second->status() == |
827 CompileJobStatus::kAnalyzed); | 826 CompileJobStatus::kAnalyzed); |
828 | 827 |
829 ASSERT_TRUE(platform.IdleTaskPending()); | 828 ASSERT_TRUE(platform.IdleTaskPending()); |
830 platform.ClearIdleTask(); | 829 platform.ClearIdleTask(); |
831 ASSERT_FALSE(platform.BackgroundTasksPending()); | 830 ASSERT_FALSE(platform.BackgroundTasksPending()); |
832 } | 831 } |
833 | 832 |
834 TEST_F(CompilerDispatcherTest, EnqueueAndStepParsed) { | 833 TEST_F(CompilerDispatcherTest, EnqueueAndStepParsed) { |
835 MockPlatform platform; | 834 MockPlatform platform; |
836 CompilerDispatcher dispatcher(i_isolate(), &platform, FLAG_stack_size); | 835 CompilerDispatcher dispatcher(i_isolate(), &platform, FLAG_stack_size); |
837 | 836 |
838 const char script[] = | 837 const char script[] = |
839 "function g() { var y = 1; function f18(x) { return x * y }; return f18; " | 838 "function g() { var y = 1; function f18(x) { return x * y }; return f18; " |
840 "} g();"; | 839 "} g();"; |
841 Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), script)); | 840 Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), script)); |
842 Handle<SharedFunctionInfo> shared(f->shared(), i_isolate()); | 841 Handle<SharedFunctionInfo> shared(f->shared(), i_isolate()); |
843 | 842 |
844 Zone zone(i_isolate()->allocator(), ZONE_NAME); | 843 ParseInfo parse_info(shared); |
845 ParseInfo parse_info(&zone, shared); | |
846 ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info)); | 844 ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info)); |
847 | 845 |
848 ASSERT_FALSE(dispatcher.IsEnqueued(shared)); | 846 ASSERT_FALSE(dispatcher.IsEnqueued(shared)); |
849 ASSERT_TRUE(dispatcher.EnqueueAndStep(shared, parse_info.literal())); | 847 ASSERT_TRUE(dispatcher.EnqueueAndStep(shared, parse_info.literal())); |
850 ASSERT_TRUE(dispatcher.IsEnqueued(shared)); | 848 ASSERT_TRUE(dispatcher.IsEnqueued(shared)); |
851 | 849 |
852 ASSERT_TRUE(dispatcher.jobs_.begin()->second->status() == | 850 ASSERT_TRUE(dispatcher.jobs_.begin()->second->status() == |
853 CompileJobStatus::kReadyToCompile); | 851 CompileJobStatus::kReadyToCompile); |
854 | 852 |
855 ASSERT_TRUE(platform.IdleTaskPending()); | 853 ASSERT_TRUE(platform.IdleTaskPending()); |
(...skipping 15 matching lines...) Expand all Loading... |
871 const char script2[] = | 869 const char script2[] = |
872 "function g() { var y = 1; function f20(x) { return x * y }; return f20; " | 870 "function g() { var y = 1; function f20(x) { return x * y }; return f20; " |
873 "} g();"; | 871 "} g();"; |
874 Handle<JSFunction> f2 = Handle<JSFunction>::cast(RunJS(isolate(), script2)); | 872 Handle<JSFunction> f2 = Handle<JSFunction>::cast(RunJS(isolate(), script2)); |
875 Handle<SharedFunctionInfo> shared2(f2->shared(), i_isolate()); | 873 Handle<SharedFunctionInfo> shared2(f2->shared(), i_isolate()); |
876 | 874 |
877 ASSERT_FALSE(shared1->is_compiled()); | 875 ASSERT_FALSE(shared1->is_compiled()); |
878 ASSERT_FALSE(shared2->is_compiled()); | 876 ASSERT_FALSE(shared2->is_compiled()); |
879 | 877 |
880 // Enqueue shared1 as already parsed. | 878 // Enqueue shared1 as already parsed. |
881 Zone zone(i_isolate()->allocator(), ZONE_NAME); | 879 ParseInfo parse_info(shared1); |
882 ParseInfo parse_info(&zone, shared1); | |
883 ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info)); | 880 ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info)); |
884 ASSERT_TRUE(dispatcher.Enqueue(shared1, parse_info.literal())); | 881 ASSERT_TRUE(dispatcher.Enqueue(shared1, parse_info.literal())); |
885 | 882 |
886 // Enqueue shared2 for parsing and compiling | 883 // Enqueue shared2 for parsing and compiling |
887 ASSERT_TRUE(dispatcher.Enqueue(shared2)); | 884 ASSERT_TRUE(dispatcher.Enqueue(shared2)); |
888 | 885 |
889 ASSERT_TRUE(dispatcher.FinishAllNow()); | 886 ASSERT_TRUE(dispatcher.FinishAllNow()); |
890 | 887 |
891 // Finishing removes the SFI from the queue. | 888 // Finishing removes the SFI from the queue. |
892 ASSERT_FALSE(dispatcher.IsEnqueued(shared1)); | 889 ASSERT_FALSE(dispatcher.IsEnqueued(shared1)); |
893 ASSERT_FALSE(dispatcher.IsEnqueued(shared2)); | 890 ASSERT_FALSE(dispatcher.IsEnqueued(shared2)); |
894 ASSERT_TRUE(shared1->is_compiled()); | 891 ASSERT_TRUE(shared1->is_compiled()); |
895 ASSERT_TRUE(shared2->is_compiled()); | 892 ASSERT_TRUE(shared2->is_compiled()); |
896 ASSERT_TRUE(platform.IdleTaskPending()); | 893 ASSERT_TRUE(platform.IdleTaskPending()); |
897 platform.ClearIdleTask(); | 894 platform.ClearIdleTask(); |
898 } | 895 } |
899 | 896 |
900 } // namespace internal | 897 } // namespace internal |
901 } // namespace v8 | 898 } // namespace v8 |
OLD | NEW |