Changeset 1759


Ignore:
Timestamp:
Aug 4, 2010, 8:38:07 PM (11 years ago)
Author:
kopal
Message:

optimized executionEngine

Location:
trunk/CrypPlugins/WorkspaceManager
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/Execution/ExecutionEngine.cs

    r1755 r1759  
    363363                        return;
    364364                    }
    365                     finally
    366                     {
    367                         connectorModel.HasData = false;
    368                         connectorModel.Data = null;
    369                         foreach (ConnectionModel connectionModel in connectorModel.InputConnections)
     365                }
     366            }
     367           
     368            msg.PluginModel.Plugin.Execute();
     369           
     370            if (this.executionEngine.BenchmarkPlugins)
     371            {
     372                this.executionEngine.ExecutedPluginsCounter++;
     373            }
     374
     375            foreach (ConnectorModel connectorModel in PluginModel.InputConnectors)
     376            {
     377                if (connectorModel.HasData)
     378                {
     379
     380                    connectorModel.HasData = false;
     381                    connectorModel.Data = null;
     382                    foreach (ConnectionModel connectionModel in connectorModel.InputConnections)
     383                    {
     384                        connectionModel.Active = false;
     385                        connectorModel.GuiNeedsUpdate = true;
     386
     387                        if (!connectionModel.From.PluginModel.Startable)
    370388                        {
    371                             connectionModel.Active = false;
    372                             connectorModel.GuiNeedsUpdate = true;
     389                            connectionModel.From.PluginModel.checkExecutable(connectionModel.From.PluginModel.PluginProtocol);
    373390                        }
    374                     }
     391                    }                   
    375392                }
    376393            }
    377394           
    378             msg.PluginModel.Plugin.Execute();         
    379 
    380             if (this.executionEngine.BenchmarkPlugins)
    381             {
    382                 this.executionEngine.ExecutedPluginsCounter++;                               
    383             }
    384395        }
    385396     
     
    435446                        return;
    436447                   
    437                     bool donotrun = false;
    438448                    ProtocolBase protocol = null;
    439449                    lock (this)
     
    442452                        if (this.waitingProtocols.Count == 0)
    443453                            break;
    444 
    445                         protocol = this.waitingProtocols.Dequeue();
    446 
    447                         if (protocol is PluginProtocol)
     454                    }
     455                    protocol = this.waitingProtocols.Dequeue();                                           
     456                    ProtocolStatus status = protocol.Run();
     457
     458                    lock (this)
     459                    {
     460                        switch (status)
    448461                        {
    449                             PluginProtocol pluginProtocol = (PluginProtocol)protocol;
    450                             foreach (ConnectorModel outputConnector in pluginProtocol.PluginModel.OutputConnectors)
    451                             {
    452                                 foreach (ConnectionModel connection in outputConnector.OutputConnections)
    453                                 {                                   
    454                                     if (connection.To.HasData &&
    455                                         connection.To.PluginModel != pluginProtocol.PluginModel &&
    456                                         donotrun == false)
    457                                     {                                           
    458                                         this.waitingProtocols.Enqueue(protocol);
    459                                         donotrun = true;
    460                                     }                                 
    461                                 }
    462                             }               
    463                         }
    464                     }
    465 
    466                     if (donotrun == false)
    467                     {
    468                         ProtocolStatus status = protocol.Run();
    469 
    470                         lock (this)
    471                         {
    472                             switch (status)
    473                             {
    474                                 case ProtocolStatus.Created:
    475                                     System.Diagnostics.Debug.Assert(false);
    476                                     break;
    477                                 case ProtocolStatus.Ready:
    478                                     this.waitingProtocols.Enqueue(protocol);
    479                                     break;
    480                                 case ProtocolStatus.Waiting:
    481                                     break;
    482                                 case ProtocolStatus.Terminated:
    483                                     System.Diagnostics.Debug.Assert(!this.waitingProtocols.Contains(protocol));
    484                                     this.RemoveProtocol(protocol);
    485                                     break;
    486                             }
     462                            case ProtocolStatus.Created:
     463                                System.Diagnostics.Debug.Assert(false);
     464                                break;
     465                            case ProtocolStatus.Ready:
     466                                this.waitingProtocols.Enqueue(protocol);
     467                                break;
     468                            case ProtocolStatus.Waiting:
     469                                break;
     470                            case ProtocolStatus.Terminated:
     471                                System.Diagnostics.Debug.Assert(!this.waitingProtocols.Contains(protocol));
     472                                this.RemoveProtocol(protocol);
     473                                break;
    487474                        }
    488475                    }
  • trunk/CrypPlugins/WorkspaceManager/Model/PluginModel.cs

    r1755 r1759  
    318318            {
    319319                if (!connectorModel.IControl && (connectorModel.IsMandatory || connectorModel.InputConnections.Count > 0) && !connectorModel.HasData)
    320                 {
    321                     foreach (ConnectionModel connectionModel in connectorModel.InputConnections)
    322                     {
    323                         if (connectionModel.From.PluginModel.Startable && connectionModel.From.PluginModel.PluginProtocol.QueueLength == 0)
    324                         {                           
    325                             msg = new MessageExecution();
    326                             msg.PluginModel = connectionModel.From.PluginModel;
    327                             connectionModel.From.PluginModel.pluginProtocol.BroadcastMessageReliably(msg);
    328                         }
    329                     }
     320                {                   
    330321                    return;
    331322                }               
     323            }
     324
     325            foreach (ConnectorModel connectorModel in this.OutputConnectors)
     326            {
     327                if (!connectorModel.IControl)
     328                {
     329                    foreach(ConnectionModel connectionModel in connectorModel.OutputConnections)
     330                    {
     331                        if (connectionModel.To.HasData)
     332                        {
     333                            return;
     334                        }
     335                    }
     336                }
    332337            }
    333338
Note: See TracChangeset for help on using the changeset viewer.