Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(925)

Side by Side Diff: tools/gn/functions.cc

Issue 2926013002: Support explicit pools in actions (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium 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 "tools/gn/functions.h" 5 #include "tools/gn/functions.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <iostream> 8 #include <iostream>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 R"*(pool: Defines a pool object. 726 R"*(pool: Defines a pool object.
727 727
728 Pool objects can be applied to a tool to limit the parallelism of the 728 Pool objects can be applied to a tool to limit the parallelism of the
729 build. This object has a single property "depth" corresponding to 729 build. This object has a single property "depth" corresponding to
730 the number of tasks that may run simultaneously. 730 the number of tasks that may run simultaneously.
731 731
732 As the file containing the pool definition may be executed in the 732 As the file containing the pool definition may be executed in the
733 context of more than one toolchain it is recommended to specify an 733 context of more than one toolchain it is recommended to specify an
734 explicit toolchain when defining and referencing a pool. 734 explicit toolchain when defining and referencing a pool.
735 735
736 A pool is referenced by its label just like a target. 736 A pool is referenced by its label just like a target.
brettw 2017/06/08 18:36:20 Can you have a section here about the meaning of t
Petr Hosek 2017/06/13 02:16:58 Done.
737 737
738 Variables 738 Variables
739 739
740 depth* 740 console, depth*
741 * = required 741 * = required
742 742
743 Example 743 Example
744 744
745 if (current_toolchain == default_toolchain) { 745 if (current_toolchain == default_toolchain) {
746 pool("link_pool") { 746 pool("link_pool") {
747 depth = 1 747 depth = 1
748 } 748 }
749 } 749 }
750 750
(...skipping 17 matching lines...) Expand all
768 768
769 if (!EnsureSingleStringArg(function, args, err) || 769 if (!EnsureSingleStringArg(function, args, err) ||
770 !EnsureNotProcessingImport(function, scope, err)) 770 !EnsureNotProcessingImport(function, scope, err))
771 return Value(); 771 return Value();
772 772
773 Label label(MakeLabelForScope(scope, function, args[0].string_value())); 773 Label label(MakeLabelForScope(scope, function, args[0].string_value()));
774 774
775 if (g_scheduler->verbose_logging()) 775 if (g_scheduler->verbose_logging())
776 g_scheduler->Log("Defining pool", label.GetUserVisibleName(true)); 776 g_scheduler->Log("Defining pool", label.GetUserVisibleName(true));
777 777
778 // Get the pool depth. It is an error to define a pool without a depth, 778 // Create the new pool.
779 // so check first for the presence of the value. 779 std::unique_ptr<Pool> pool(new Pool(scope->settings(), label));
780 const Value* depth = scope->GetValue(kDepth, true); 780
781 if (!depth) { 781 // Check the value of console.
782 *err = Err(function, "Can't define a pool without depth."); 782 const Value* console = scope->GetValue(variables::kConsole, true);
783 return Value(); 783 if (console) {
784 if (!console->VerifyTypeIs(Value::BOOLEAN, err))
785 return Value();
784 } 786 }
785 787
786 if (!depth->VerifyTypeIs(Value::INTEGER, err)) 788 // Get the pool depth. Pool must hae a depth or be a console pool.
787 return Value(); 789 const Value* depth = scope->GetValue(kDepth, true);
790 if (console && console->boolean_value()) {
791 if (depth) {
792 *err = Err(function, "Can't define a console pool with depth.");
793 return Value();
794 }
788 795
789 if (depth->int_value() < 0) { 796 pool->set_console(console->boolean_value());
790 *err = Err(function, "depth must be positive or nul."); 797 } else {
791 return Value(); 798 if (!depth) {
799 *err = Err(function, "Can't define a pool without depth.");
800 return Value();
801 }
802
803 if (!depth->VerifyTypeIs(Value::INTEGER, err))
804 return Value();
805
806 if (depth->int_value() < 0) {
807 *err = Err(function, "depth must be positive or nul.");
808 return Value();
809 }
810
811 pool->set_depth(depth->int_value());
792 } 812 }
793 813
794 // Create the new pool.
795 std::unique_ptr<Pool> pool(new Pool(scope->settings(), label));
796 pool->set_depth(depth->int_value());
797
798 // Save the generated item. 814 // Save the generated item.
799 Scope::ItemVector* collector = scope->GetItemCollector(); 815 Scope::ItemVector* collector = scope->GetItemCollector();
800 if (!collector) { 816 if (!collector) {
801 *err = Err(function, "Can't define a pool in this context."); 817 *err = Err(function, "Can't define a pool in this context.");
802 return Value(); 818 return Value();
803 } 819 }
804 collector->push_back(pool.release()); 820 collector->push_back(pool.release());
805 821
806 return Value(); 822 return Value();
807 } 823 }
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
1137 } 1153 }
1138 1154
1139 // Otherwise it's a no-block function. 1155 // Otherwise it's a no-block function.
1140 if (!VerifyNoBlockForFunctionCall(function, block, err)) 1156 if (!VerifyNoBlockForFunctionCall(function, block, err))
1141 return Value(); 1157 return Value();
1142 return found_function->second.no_block_runner(scope, function, 1158 return found_function->second.no_block_runner(scope, function,
1143 args.list_value(), err); 1159 args.list_value(), err);
1144 } 1160 }
1145 1161
1146 } // namespace functions 1162 } // namespace functions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698