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

Unified Diff: tools/gn/item_node.h

Issue 56433003: GN threading refactor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/item.cc ('k') | tools/gn/item_node.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/item_node.h
diff --git a/tools/gn/item_node.h b/tools/gn/item_node.h
deleted file mode 100644
index dbee141b7373593091a93aa6ac0a8250e0634021..0000000000000000000000000000000000000000
--- a/tools/gn/item_node.h
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef TOOLS_GN_ITEM_NODE_H_
-#define TOOLS_GN_ITEM_NODE_H_
-
-#include <map>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/callback.h"
-#include "base/memory/scoped_ptr.h"
-#include "tools/gn/location.h"
-
-class BuildSettings;
-class Err;
-class Item;
-
-// Represents a node in the depdency tree. It references an Item which is
-// the actual thing.
-//
-// The items and nodes are split apart so that the ItemTree can manipulate
-// the dependencies one one thread while the Item itself is been modified on
-// another.
-class ItemNode {
- public:
- // The state of this node. As more of the load progresses, we'll move
- // downward in this list toward the resolved state.
- enum State {
- // Another item has referenced this one by name, but we have not yet
- // encountered its definition.
- REFERENCED = 0,
-
- // We've seen the definition of this item but have not requested that its
- // dependencies be loaded. In non-greedy generation mode (see item_tree.h)
- // some nodes will stay in this state forever as long as they're not needed
- // for anything that is required.
- DEFINED,
-
- // The item has been defined and we've requested that all of the
- // dependencies be loaded. Not all of the dependencies have been resolved,
- // however, and we're still waiting on some build files to be run (or
- // perhaps there are undefined dependencies).
- PENDING_DEPS,
-
- // All of this item's transitive dependencies have been found and
- // resolved.
- RESOLVED,
- };
-
- // Stores a set of ItemNodes and the associated range that the dependency
- // was added from.
- typedef std::map<ItemNode*, LocationRange> ItemNodeMap;
-
- // Takes ownership of the pointer.
- // Initial state will be REFERENCED.
- ItemNode(Item* i);
- ~ItemNode();
-
- State state() const { return state_; }
-
- // This closure will be executed when the item is resolved and it has the
- // should_generate flag set.
- void set_resolved_closure(const base::Closure& closure) {
- resolved_closure_ = closure;
- }
-
- const Item* item() const { return item_.get(); }
- Item* item() { return item_.get(); }
-
- // True if this item should be generated. In greedy mode, this will alwyas
- // be set. Otherwise, this bit will be "pushed" through the tree to
- // generate the minimum set of targets required for some special base target.
- // Initialized to false.
- //
- // If this item has been defined, setting this flag will schedule the load
- // of dependent nodes and also set their should_generate bits.
- bool should_generate() const { return should_generate_; }
- bool SetShouldGenerate(const BuildSettings* build_settings, Err* err);
-
- // Where this was created from, which might be when it was generated or
- // when it was first referenced from another target.
- const LocationRange& originally_referenced_from_here() const {
- return originally_referenced_from_here_;
- }
- void set_originally_referenced_from_here(const LocationRange& r) {
- originally_referenced_from_here_ = r;
- }
-
- // Where this was generated from. This will be empty for items that have
- // been referenced but not generated. Note that this has to be one the
- // ItemNode because it can be changing from multiple threads and we need
- // to be sure that access is serialized.
- const LocationRange& generated_from_here() const {
- return generated_from_here_;
- }
- void set_generated_from_here(const LocationRange& r) {
- generated_from_here_ = r;
- }
-
- const ItemNodeMap& direct_dependencies() const {
- return direct_dependencies_;
- }
- const ItemNodeMap& unresolved_dependencies() const {
- return unresolved_dependencies_;
- }
-
- bool AddDependency(const BuildSettings* build_settings,
- const LocationRange& specified_from_here,
- ItemNode* node,
- Err* err);
-
- // Removes the given dependency from the unresolved list. Does not do
- // anything else to update waiters.
- void MarkDirectDependencyResolved(ItemNode* node);
-
- // Destructively retrieve the set of waiting nodes.
- void SwapOutWaitingDependencySet(ItemNodeMap* out_map);
-
- // Marks this item state as defined (see above). If the should generate
- // flag is set, this will schedule a load of the dependencies and
- // automatically transition to the PENDING_DEPS state.
- bool SetDefined(const BuildSettings* build_settings, Err* err);
-
- // Marks this item state as resolved (see above).
- void SetResolved();
-
- private:
- // Schedules loading the dependencies of this node. The current state must
- // be DEFINED, and this call will transition the state to PENDING_DEPS.
- //
- // Requesting deps can fail. On failure returns false and sets the err.
- bool ScheduleDepsLoad(const BuildSettings* build_settings, Err* err);
-
- State state_;
- scoped_ptr<Item> item_;
- bool should_generate_; // See getter above.
-
- LocationRange originally_referenced_from_here_;
- LocationRange generated_from_here_;
-
- // What to run when this item is resolved.
- base::Closure resolved_closure_;
-
- // Everything this item directly depends on.
- ItemNodeMap direct_dependencies_;
-
- // Unresolved things this item directly depends on.
- ItemNodeMap unresolved_dependencies_;
-
- // These items are waiting on us to be resolved before they can be
- // resolved. This is the backpointer for unresolved_dependencies_.
- ItemNodeMap waiting_on_resolution_;
-
- DISALLOW_COPY_AND_ASSIGN(ItemNode);
-};
-
-#endif // TOOLS_GN_ITEM_NODE_H_
« no previous file with comments | « tools/gn/item.cc ('k') | tools/gn/item_node.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698