| OLD | NEW | 
|    1 // Copyright 2016 The Chromium Authors. All rights reserved. |    1 // Copyright 2016 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 #ifndef SERVICES_MEDIA_FRAMEWORK_ENGINE_H_ |    5 #ifndef SERVICES_MEDIA_FRAMEWORK_ENGINE_H_ | 
|    6 #define SERVICES_MEDIA_FRAMEWORK_ENGINE_H_ |    6 #define SERVICES_MEDIA_FRAMEWORK_ENGINE_H_ | 
|    7  |    7  | 
|    8 #include <list> |    8 #include <list> | 
|    9 #include <queue> |    9 #include <queue> | 
|   10 #include <stack> |   10 #include <stack> | 
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  100   // Queues the stage for update and winds down the backlog. |  100   // Queues the stage for update and winds down the backlog. | 
|  101   void RequestUpdate(Stage* stage); |  101   void RequestUpdate(Stage* stage); | 
|  102  |  102  | 
|  103   // Pushes the stage to the supply backlog if it isn't already there. |  103   // Pushes the stage to the supply backlog if it isn't already there. | 
|  104   void PushToSupplyBacklog(Stage* stage); |  104   void PushToSupplyBacklog(Stage* stage); | 
|  105  |  105  | 
|  106   // Pushes the stage to the demand backlog if it isn't already there. |  106   // Pushes the stage to the demand backlog if it isn't already there. | 
|  107   void PushToDemandBacklog(Stage* stage); |  107   void PushToDemandBacklog(Stage* stage); | 
|  108  |  108  | 
|  109  private: |  109  private: | 
|  110   using UpstreamVisitor = std::function<void( |  110   using UpstreamVisitor = | 
|  111       const InputRef& input, |  111       std::function<void(const InputRef& input, | 
|  112       const OutputRef& output, |  112                          const OutputRef& output, | 
|  113       const Stage::UpstreamCallback& callback)>; |  113                          const Stage::UpstreamCallback& callback)>; | 
|  114   using DownstreamVisitor = std::function<void( |  114   using DownstreamVisitor = | 
|  115       const OutputRef& output, |  115       std::function<void(const OutputRef& output, | 
|  116       const InputRef& input, |  116                          const InputRef& input, | 
|  117       const Stage::DownstreamCallback& callback)>; |  117                          const Stage::DownstreamCallback& callback)>; | 
|  118  |  118  | 
|  119   void VisitUpstream( |  119   void VisitUpstream(const InputRef& input, const UpstreamVisitor& vistor); | 
|  120       const InputRef& input, |  | 
|  121       const UpstreamVisitor& vistor); |  | 
|  122  |  120  | 
|  123   void VisitDownstream( |  121   void VisitDownstream(const OutputRef& output, | 
|  124       const OutputRef& output, |  122                        const DownstreamVisitor& vistor); | 
|  125       const DownstreamVisitor& vistor); |  | 
|  126  |  123  | 
|  127   // Processes the entire backlog. |  124   // Processes the entire backlog. | 
|  128   void Update(); |  125   void Update(); | 
|  129  |  126  | 
|  130   // Performs processing for a single stage, updating the backlog accordingly. |  127   // Performs processing for a single stage, updating the backlog accordingly. | 
|  131   void Update(Stage *stage); |  128   void Update(Stage* stage); | 
|  132  |  129  | 
|  133   // Pops a stage from the supply backlog and returns it or returns nullptr if |  130   // Pops a stage from the supply backlog and returns it or returns nullptr if | 
|  134   // the supply backlog is empty. |  131   // the supply backlog is empty. | 
|  135   Stage* PopFromSupplyBacklog(); |  132   Stage* PopFromSupplyBacklog(); | 
|  136  |  133  | 
|  137   // Pops a stage from the demand backlog and returns it or returns nullptr if |  134   // Pops a stage from the demand backlog and returns it or returns nullptr if | 
|  138   // the demand backlog is empty. |  135   // the demand backlog is empty. | 
|  139   Stage* PopFromDemandBacklog(); |  136   Stage* PopFromDemandBacklog(); | 
|  140  |  137  | 
|  141   mutable base::Lock lock_; |  138   mutable base::Lock lock_; | 
|  142   // supply_backlog_ contains pointers to all the stages that have been supplied |  139   // supply_backlog_ contains pointers to all the stages that have been supplied | 
|  143   // (packets or frames) but have not been updated since. demand_backlog_ does |  140   // (packets or frames) but have not been updated since. demand_backlog_ does | 
|  144   // the same for demand. The use of queue vs stack here is a guess as to what |  141   // the same for demand. The use of queue vs stack here is a guess as to what | 
|  145   // will yield the best results. It's possible that only a single backlog is |  142   // will yield the best results. It's possible that only a single backlog is | 
|  146   // required. |  143   // required. | 
|  147   // TODO(dalesat): Determine the best ordering and implement it. |  144   // TODO(dalesat): Determine the best ordering and implement it. | 
|  148   std::queue<Stage*> supply_backlog_; |  145   std::queue<Stage*> supply_backlog_; | 
|  149   std::stack<Stage*> demand_backlog_; |  146   std::stack<Stage*> demand_backlog_; | 
|  150   bool packets_produced_; |  147   bool packets_produced_; | 
|  151 }; |  148 }; | 
|  152  |  149  | 
|  153 }  // namespace media |  150 }  // namespace media | 
|  154 }  // namespace mojo |  151 }  // namespace mojo | 
|  155  |  152  | 
|  156 #endif  // SERVICES_MEDIA_FRAMEWORK_ENGINE_H_ |  153 #endif  // SERVICES_MEDIA_FRAMEWORK_ENGINE_H_ | 
| OLD | NEW |