Changeset 2146


Ignore:
Timestamp:
Dec 1, 2010, 5:02:44 PM (11 years ago)
Author:
Sven Rech
Message:

Added opencl presentation in KeySearcher

Location:
trunk/CrypPlugins/KeySearcher
Files:
9 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/KeySearcher/KeySearcher.cs

    r2143 r2146  
    6363
    6464        private OpenCLManager oclManager = null;
     65        private Mutex openCLPresentationMutex = new Mutex();
    6566
    6667        private readonly Stopwatch localBruteForceStopwatch;
     
    269270        {
    270271            ((QuickWatch)QuickWatchPresentation).IsP2PEnabled = settings.UsePeerToPeer;
     272            ((QuickWatch)QuickWatchPresentation).IsOpenCLEnabled = settings.UseOpenCL;
    271273            p2PQuickWatchPresentation.UpdateSettings(this, settings);
    272274        }
     
    296298        {
    297299            IsKeySearcherRunning = true;
     300
     301            ((QuickWatch)QuickWatchPresentation).Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     302            {
     303                openCLPresentationMutex.WaitOne();
     304                ((QuickWatch)QuickWatchPresentation).OpenCLPresentation.AmountOfDevices = 0;
     305                openCLPresentationMutex.ReleaseMutex();
     306            }, null);
    298307
    299308            //either byte[] CStream input or CryptoolStream Object input
     
    367376            int threadid = (int)parameters[1];
    368377            BigInteger[] doneKeysArray = (BigInteger[])parameters[2];
    369             BigInteger[] keycounterArray = (BigInteger[])parameters[3];
    370             BigInteger[] keysLeft = (BigInteger[])parameters[4];
    371             IControlEncryption sender = (IControlEncryption)parameters[5];
    372             int bytesToUse = (int)parameters[6];
    373             Stack threadStack = (Stack)parameters[7];
    374             bool useOpenCL = (bool)parameters[8];
     378            BigInteger[] openCLDoneKeysArray = (BigInteger[])parameters[3];
     379            BigInteger[] keycounterArray = (BigInteger[])parameters[4];
     380            BigInteger[] keysLeft = (BigInteger[])parameters[5];
     381            IControlEncryption sender = (IControlEncryption)parameters[6];
     382            int bytesToUse = (int)parameters[7];
     383            Stack threadStack = (Stack)parameters[8];
     384            bool useOpenCL = (bool)parameters[9];
    375385
    376386            KeySearcherOpenCLCode keySearcherOpenCLCode = null;
     
    380390                keySearcherOpenCLCode = new KeySearcherOpenCLCode(this, encryptedData, sender, CostMaster, 256 * 256 * 256 * 16);
    381391                keySearcherOpenCLSubbatchOptimizer = new KeySearcherOpenCLSubbatchOptimizer(oclManager.CQ[settings.OpenCLDevice].Device.MaxWorkItemSizes.Aggregate(1, (x, y) => (x * (int)y)) / 2);
     392                ((QuickWatch)QuickWatchPresentation).Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     393                {
     394                    openCLPresentationMutex.WaitOne();
     395                    ((QuickWatch)QuickWatchPresentation).OpenCLPresentation.AmountOfDevices++;
     396                    openCLPresentationMutex.ReleaseMutex();
     397                }, null);
    382398            }
    383399
     
    412428                            {
    413429                                useOpenCL = false;
     430                                ((QuickWatch)QuickWatchPresentation).Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     431                                {
     432                                    openCLPresentationMutex.WaitOne();
     433                                    ((QuickWatch)QuickWatchPresentation).OpenCLPresentation.AmountOfDevices--;
     434                                    openCLPresentationMutex.ReleaseMutex();
     435                                }, null);
    414436                                continue;
    415437                            }
     
    445467            int threadid = (int)parameters[1];
    446468            BigInteger[] doneKeysArray = (BigInteger[])parameters[2];
    447             BigInteger[] keycounterArray = (BigInteger[])parameters[3];
    448             BigInteger[] keysLeft = (BigInteger[])parameters[4];
     469            BigInteger[] openCLDoneKeysArray = (BigInteger[])parameters[3];
     470            BigInteger[] keycounterArray = (BigInteger[])parameters[4];
     471            BigInteger[] keysLeft = (BigInteger[])parameters[5];
    449472            try
    450473            {
     
    461484
    462485                int subbatches = keySearcherOpenCLSubbatchOptimizer.GetAmountOfSubbatches(keyTranslator);
     486                int subbatchSize = keyTranslator.GetOpenCLBatchSize() / subbatches;
     487                ((QuickWatch) QuickWatchPresentation).Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback) delegate
     488                                                                    {
     489                                                                        ((QuickWatch)QuickWatchPresentation).OpenCLPresentation.batches.Content = subbatches;
     490                                                                        ((QuickWatch)QuickWatchPresentation).OpenCLPresentation.threads.Content = subbatchSize;
     491                                                                    }, null);
    463492                GuiLogMessage(string.Format("Now using {0} subbatches", subbatches), NotificationLevel.Info);
    464 
    465                 int subbatchSize = keyTranslator.GetOpenCLBatchSize() / subbatches;
     493               
    466494                float[] costArray = new float[subbatchSize];
    467495                Mem costs = oclManager.Context.CreateBuffer(MemFlags.READ_WRITE, costArray.Length * 4);
     
    487515
    488516                    doneKeysArray[threadid] += subbatchSize;
     517                    openCLDoneKeysArray[threadid] += subbatchSize;
    489518                    keycounterArray[threadid] += subbatchSize;
    490519                    keysLeft[threadid] -= subbatchSize;
     
    742771
    743772            BigInteger[] doneKeysA = new BigInteger[patterns.Length];
     773            BigInteger[] openCLDoneKeysA = new BigInteger[patterns.Length];
    744774            BigInteger[] keycounters = new BigInteger[patterns.Length];
    745775            BigInteger[] keysleft = new BigInteger[patterns.Length];
    746776            Stack threadStack = Stack.Synchronized(new Stack());
    747777            threadsStopEvents = ArrayList.Synchronized(new ArrayList());
    748             StartThreads(sender, bytesToUse, patterns, doneKeysA, keycounters, keysleft, threadStack);
     778            StartThreads(sender, bytesToUse, patterns, doneKeysA, openCLDoneKeysA, keycounters, keysleft, threadStack);
    749779
    750780            DateTime lastTime = DateTime.Now;
     
    760790                BigInteger keycounter = 0;
    761791                BigInteger doneKeys = 0;
     792                BigInteger openCLdoneKeys = 0;
    762793                foreach (BigInteger dk in doneKeysA)
    763794                    doneKeys += dk;
     795                foreach (BigInteger dk in openCLDoneKeysA)
     796                    openCLdoneKeys += dk;
    764797                foreach (BigInteger kc in keycounters)
    765798                    keycounter += kc;
     
    793826
    794827                long keysPerSecond = (long)((long)doneKeys/(DateTime.Now - lastTime).TotalSeconds);
     828                long openCLKeysPerSecond = (long)((long)openCLdoneKeys / (DateTime.Now - lastTime).TotalSeconds);
    795829                lastTime = DateTime.Now;
    796830                if (redirectResultsToStatisticsGenerator)
     
    800834                else
    801835                {
    802                     showProgress(costList, size, keycounter, keysPerSecond);                   
     836                    showProgress(costList, size, keycounter, keysPerSecond, openCLKeysPerSecond, (double)openCLdoneKeys / (double)doneKeys);
    803837                }
    804838               
     
    808842                for (int i = 0; i < doneKeysA.Length; i++)
    809843                    doneKeysA[i] = 0;
     844                openCLdoneKeys = 0;
     845                for (int i = 0; i < openCLDoneKeysA.Length; i++)
     846                    openCLDoneKeysA[i] = 0;
    810847                #endregion
    811848
     
    814851            }//end while
    815852
    816             showProgress(costList, 1, 1, 1);
     853            showProgress(costList, 1, 1, 1, 1, 1);
    817854
    818855            //wake up all sleeping threads, so they can stop:
     
    865902        }
    866903
    867         internal void showProgress(LinkedList<ValueKey> costList, BigInteger size, BigInteger keycounter, long keysPerSecond)
     904        internal void showProgress(LinkedList<ValueKey> costList, BigInteger size, BigInteger keycounter, long keysPerSecond, long openCLkeysPerSecond, double openclRatio)
    868905        {
    869906            System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    870907
    871908            LinkedListNode<ValueKey> linkedListNode;
    872             ProgressChanged((double)keycounter / (double) size, 1.0);
     909            ProgressChanged((double)keycounter / (double)size, 1.0);
    873910
    874911            if (localQuickWatchPresentation.IsVisible && keysPerSecond != 0 && !stop)
     
    921958                    localQuickWatchPresentation.entries.Clear();
    922959                    linkedListNode = costList.First;
    923                    
     960
    924961                    int i = 0;
    925                     while (linkedListNode != null)
    926                     {
    927                         i++;
    928 
    929                         ResultEntry entry = new ResultEntry();
    930                         entry.Ranking = "" + i;
    931                         entry.Value = "" + Math.Round(linkedListNode.Value.value,3);
    932                         entry.Key = linkedListNode.Value.key;
    933                         entry.Text = enc.GetString(linkedListNode.Value.decryption);
    934 
    935                         localQuickWatchPresentation.entries.Add(entry);
    936                         linkedListNode = linkedListNode.Next;
    937                     }
    938                 }
    939                 , null);
    940             }//end if
    941 
    942 
    943             else if (!stop && localQuickWatchPresentation.IsVisible)
    944             {
    945 
    946                 localQuickWatchPresentation.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    947                 {
    948                     localQuickWatchPresentation.entries.Clear();
    949                     linkedListNode = costList.First;                   
    950                     int i = 0;
    951 
    952962                    while (linkedListNode != null)
    953963                    {
     
    965975                }
    966976                , null);
    967             }
     977            }//end if
     978
     979
     980            else if (!stop && localQuickWatchPresentation.IsVisible)
     981            {
     982
     983                localQuickWatchPresentation.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     984                {
     985                    localQuickWatchPresentation.entries.Clear();
     986                    linkedListNode = costList.First;
     987                    int i = 0;
     988
     989                    while (linkedListNode != null)
     990                    {
     991                        i++;
     992
     993                        ResultEntry entry = new ResultEntry();
     994                        entry.Ranking = "" + i;
     995                        entry.Value = "" + Math.Round(linkedListNode.Value.value, 3);
     996                        entry.Key = linkedListNode.Value.key;
     997                        entry.Text = enc.GetString(linkedListNode.Value.decryption);
     998
     999                        localQuickWatchPresentation.entries.Add(entry);
     1000                        linkedListNode = linkedListNode.Next;
     1001                    }
     1002                }
     1003                , null);
     1004            }
     1005
     1006            //show openCL keys/sec:
     1007            ((QuickWatch)QuickWatchPresentation).Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     1008                    {
     1009                        ((QuickWatch)QuickWatchPresentation).OpenCLPresentation.keysPerSecond.Content = String.Format("{0:N}", openCLkeysPerSecond);
     1010                        ((QuickWatch)QuickWatchPresentation).OpenCLPresentation.ratio.Content = String.Format("{0:P}", openclRatio);
     1011                    }, null);
     1012
    9681013        }
    9691014
     
    10591104        #endregion
    10601105
    1061         private void StartThreads(IControlEncryption sender, int bytesToUse, KeyPattern.KeyPattern[] patterns, BigInteger[] doneKeysA, BigInteger[] keycounters, BigInteger[] keysleft, Stack threadStack)
     1106        private void StartThreads(IControlEncryption sender, int bytesToUse, KeyPattern.KeyPattern[] patterns, BigInteger[] doneKeysA, BigInteger[] openCLDoneKeysA, BigInteger[] keycounters, BigInteger[] keysleft, Stack threadStack)
    10621107        {
    10631108            for (int i = 0; i < patterns.Length; i++)
     
    10651110                WaitCallback worker = new WaitCallback(KeySearcherJob);
    10661111                doneKeysA[i] = new BigInteger();
     1112                openCLDoneKeysA[i] = new BigInteger();
    10671113                keycounters[i] = new BigInteger();
    10681114                bool useOpenCL = false;
     
    10711117                    useOpenCL = true;
    10721118
    1073                 ThreadPool.QueueUserWorkItem(worker, new object[] { patterns, i, doneKeysA, keycounters, keysleft, sender, bytesToUse, threadStack, useOpenCL });
     1119                ThreadPool.QueueUserWorkItem(worker, new object[] { patterns, i, doneKeysA, openCLDoneKeysA, keycounters, keysleft, sender, bytesToUse, threadStack, useOpenCL });
    10741120            }
    10751121        }
  • trunk/CrypPlugins/KeySearcher/KeySearcher.csproj

    r2143 r2146  
    129129    <Compile Include="P2P\Exceptions\KeySearcherStopException.cs" />
    130130    <Compile Include="P2P\Storage\StatusUpdater.cs" />
     131    <Compile Include="Presentation\Controls\OpenCLPresentation.xaml.cs">
     132      <DependentUpon>OpenCLPresentation.xaml</DependentUpon>
     133    </Compile>
    131134    <Compile Include="Presentation\Controls\LocalQuickWatchPresentation.xaml.cs">
    132135      <DependentUpon>LocalQuickWatchPresentation.xaml</DependentUpon>
     
    178181  </ItemGroup>
    179182  <ItemGroup>
     183    <Page Include="Presentation\Controls\OpenCLPresentation.xaml">
     184      <Generator>MSBuild:Compile</Generator>
     185      <SubType>Designer</SubType>
     186    </Page>
    180187    <Page Include="Presentation\Controls\P2PQuickWatchPresentation.xaml">
    181188      <SubType>Designer</SubType>
  • trunk/CrypPlugins/KeySearcher/OpenCL/KeySearcherOpenCLCode.cs

    r2143 r2146  
    7878            {
    7979                var program = oclManager.CompileSource(CreateOpenCLBruteForceCode(keyTranslator));
    80                 keySearcher.GuiLogMessage(string.Format("Using OpenCL with {0} threads.", keyTranslator.GetOpenCLBatchSize()), NotificationLevel.Info);
     80                //keySearcher.GuiLogMessage(string.Format("Using OpenCL with (virtually) {0} threads.", keyTranslator.GetOpenCLBatchSize()), NotificationLevel.Info);
    8181                openCLKernel = program.CreateKernel("bruteforceKernel");
    8282                return openCLKernel;
  • trunk/CrypPlugins/KeySearcher/P2P/DistributedBruteForceManager.cs

    r2142 r2146  
    265265            if (!keySearcher.stop && keyPoolTree.IsCalculationFinished())
    266266            {
    267                 keySearcher.showProgress(keySearcher.costList, 1, 1, 1);
     267                keySearcher.showProgress(keySearcher.costList, 1, 1, 1, 1, 1);
    268268                keySearcher.GuiLogMessage("Calculation complete.", NotificationLevel.Info);
    269269                keyPoolTree.UpdateStatusForFinishedCalculation();
  • trunk/CrypPlugins/KeySearcher/Presentation/Controls/LocalQuickWatchPresentation.xaml

    r1705 r2146  
    11<UserControl x:Class="KeySearcherPresentation.Controls.LocalQuickWatchPresentation"
    22    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
     3    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Controls="clr-namespace:KeySearcherPresentation.Controls" xmlns:Converter="clr-namespace:KeySearcherConverter" x:Name="LocalQuickWatch">
    44    <UserControl.Resources>
     5        <Converter:TrueToVisibleConverter x:Key="TrueToVisibleConverter" />
    56        <RotateTransform x:Key="HeaderRotate" Angle="270" />
    67        <Style x:Key="ValueRow1">
     
    8586                </Grid>
    8687            </Border>
     88            <Controls:OpenCLPresentation x:Name="OpenCLPresentation" Visibility="{Binding IsOpenCLEnabled, ElementName=LocalQuickWatch, Converter={StaticResource TrueToVisibleConverter}}" />
    8789        </StackPanel>
    8890    </Viewbox>
  • trunk/CrypPlugins/KeySearcher/Presentation/Controls/LocalQuickWatchPresentation.xaml.cs

    r1705 r2146  
    11using System;
     2using System.Windows;
    23using System.Windows.Media;
    34using System.Collections.ObjectModel;
     
    1011        public ObservableCollection<ResultEntry> entries = new ObservableCollection<ResultEntry>();
    1112
     13        public static readonly DependencyProperty IsOpenCLEnabledProperty =
     14            DependencyProperty.Register("IsOpenCLEnabled",
     15                typeof(Boolean),
     16                typeof(LocalQuickWatchPresentation), new PropertyMetadata(false));
     17
     18        public Boolean IsOpenCLEnabled
     19        {
     20            get { return (Boolean)GetValue(IsOpenCLEnabledProperty); }
     21            set { SetValue(IsOpenCLEnabledProperty, value); }
     22        }
     23
    1224        public LocalQuickWatchPresentation()
    1325        {
  • trunk/CrypPlugins/KeySearcher/Presentation/Controls/OpenCLPresentation.xaml

    r2142 r2146  
    1 <UserControl x:Class="KeySearcherPresentation.Controls.LocalQuickWatchPresentation"
     1<UserControl x:Class="KeySearcherPresentation.Controls.OpenCLPresentation"
    22    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    33    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
     
    1414        <StackPanel Width="646">
    1515            <Border BorderBrush="Silver" BorderThickness="2,2,2,2">
    16                 <Grid Height="78" Background="#AFFFD4C1">
     16                <Grid Height="78" Background="#AF375700">
    1717                    <Grid.ColumnDefinitions>
    1818                        <ColumnDefinition Width="26" />
     
    2525                        <RowDefinition Height="26" />
    2626                    </Grid.RowDefinitions>
    27                     <Border BorderThickness="1" BorderBrush="Black" LayoutTransform="{StaticResource HeaderRotate}" Background="#FFE56B00" Grid.Column="0" Grid.RowSpan="3">
    28                         <Label Content="Local" FontSize="11" HorizontalAlignment="Center" Foreground="White" />
     27                    <Border BorderThickness="1" BorderBrush="Black" LayoutTransform="{StaticResource HeaderRotate}" Background="#FF006B00" Grid.Column="0" Grid.RowSpan="3">
     28                        <Label Content="OpenCL" FontSize="11" HorizontalAlignment="Center" Foreground="White" />
    2929                    </Border>
    30                     <Label Content="Start:" Grid.Column="1" />
    31                     <Label Name="startTime" Style="{StaticResource ValueRow1}" Grid.Column="1" />
    32                     <Label Content="End:" HorizontalAlignment="Left" Grid.Column="2" />
    33                     <Label Name="endTime" Style="{StaticResource ValueRow2}" Grid.Column="2" />
    34                     <Label Content="Elapsed:" Grid.Column="1" Grid.Row="1" />
    35                     <Label Name="elapsedTime" Style="{StaticResource ValueRow1}" Grid.Column="1" Grid.Row="1" />
    36                     <Label Content="Remaining:" Grid.Column="2" Grid.Row="1" />
    37                     <Label Name="timeLeft" Style="{StaticResource ValueRow2}" Grid.Column="2" Grid.Row="1" />
    38                     <Label Content="Keys / sec:" Grid.Column="2" Grid.Row="2" />
    39                     <Label Name="keysPerSecond" Style="{StaticResource ValueRow2}" Grid.Column="2" Grid.Row="2" />
     30                    <Label Content="Keys / sec:" Grid.Column="1" Grid.Row="0" />
     31                    <Label Name="keysPerSecond" Style="{StaticResource ValueRow2}" Grid.Column="1" Grid.Row="0" />
     32                    <Label Content="Devices:" Grid.Column="2" Grid.Row="0" />
     33                    <Label Name="devices" Style="{StaticResource ValueRow2}" Grid.Column="2" Grid.Row="0" />
     34                    <Label Content="Batches:" Grid.Column="1" Grid.Row="1" />
     35                    <Label Name="batches" Style="{StaticResource ValueRow2}" Grid.Column="1" Grid.Row="1" />
     36                    <Label Content="Threads:" Grid.Column="2" Grid.Row="1" />
     37                    <Label Name="threads" Style="{StaticResource ValueRow2}" Grid.Column="2" Grid.Row="1" />
     38                    <Label Content="Ratio:" Grid.Column="1" Grid.Row="2" />
     39                    <Label Name="ratio" Style="{StaticResource ValueRow2}" Grid.Column="1" Grid.Row="2" />
    4040                </Grid>
    41             </Border>
    42             <Border BorderBrush="Silver" BorderThickness="2,0,2,2">
    43                 <Grid>
    44                     <Grid.ColumnDefinitions>
    45                         <ColumnDefinition Width="26" />
    46                         <ColumnDefinition Width="*" />
    47                     </Grid.ColumnDefinitions>
    48                     <Border BorderThickness="1" BorderBrush="Black" LayoutTransform="{StaticResource HeaderRotate}" Background="#FF479308" Grid.Column="0">
    49                         <Label Content="Top Ten" FontSize="11" HorizontalAlignment="Center" Foreground="White" Width="50" />
    50                     </Border>
    51                     <ListView Name="ListView" Background="#AFE2FFCE" ItemsSource="{Binding}" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" FontSize="10" Grid.Column="1" Height="250">
    52                         <ListView.View>
    53                             <GridView>
    54                                 <GridViewColumn Header="#" DisplayMemberBinding="{Binding Path=Ranking}" Width="25">
    55                                     <GridViewColumn.CellTemplate>
    56                                         <DataTemplate>
    57                                             <Label/>
    58                                         </DataTemplate>
    59                                     </GridViewColumn.CellTemplate>
    60                                 </GridViewColumn>
    61                                 <GridViewColumn Header="Value" DisplayMemberBinding="{Binding Path=Value}">
    62                                     <GridViewColumn.CellTemplate>
    63                                         <DataTemplate>
    64                                             <Label/>
    65                                         </DataTemplate>
    66                                     </GridViewColumn.CellTemplate>
    67                                 </GridViewColumn>
    68                                 <GridViewColumn Header="Text" DisplayMemberBinding="{Binding Path=Text}">
    69                                     <GridViewColumn.CellTemplate>
    70                                         <DataTemplate>
    71                                             <Label/>
    72                                         </DataTemplate>
    73                                     </GridViewColumn.CellTemplate>
    74                                 </GridViewColumn>
    75                                 <GridViewColumn Header="Key" DisplayMemberBinding="{Binding Path=Key}">
    76                                     <GridViewColumn.CellTemplate>
    77                                         <DataTemplate>
    78                                             <Label/>
    79                                         </DataTemplate>
    80                                     </GridViewColumn.CellTemplate>
    81                                 </GridViewColumn>
    82                             </GridView>
    83                         </ListView.View>
    84                     </ListView>
    85                 </Grid>
    86             </Border>
     41            </Border>           
    8742        </StackPanel>
    8843    </Viewbox>
  • trunk/CrypPlugins/KeySearcher/Presentation/Controls/OpenCLPresentation.xaml.cs

    r2142 r2146  
    66namespace KeySearcherPresentation.Controls
    77{   
    8     public partial class LocalQuickWatchPresentation
    9     {       
    10         public ObservableCollection<ResultEntry> entries = new ObservableCollection<ResultEntry>();
    11 
    12         public LocalQuickWatchPresentation()
     8    public partial class OpenCLPresentation
     9    {
     10        public OpenCLPresentation()
    1311        {
    1412            InitializeComponent();
    15             this.DataContext = entries;
     13        }
     14
     15        private int amountOfDevices;
     16        public int AmountOfDevices
     17        {
     18            get { return amountOfDevices; }
     19            set
     20            {
     21                amountOfDevices = value;
     22                devices.Content = amountOfDevices;
     23            }
    1624        }
    1725    }
  • trunk/CrypPlugins/KeySearcher/Presentation/Controls/P2PQuickWatchPresentation.xaml

    r1709 r2146  
    1 <UserControl x:Class="KeySearcherPresentation.Controls.P2PQuickWatchPresentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:Converter="clr-namespace:KeySearcherConverter" mc:Ignorable="d" x:Name="P2PQuickWatch" d:DesignHeight="440" d:DesignWidth="600">
     1<UserControl x:Class="KeySearcherPresentation.Controls.P2PQuickWatchPresentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:Converter="clr-namespace:KeySearcherConverter" xmlns:Controls="clr-namespace:KeySearcherPresentation.Controls" mc:Ignorable="d" x:Name="P2PQuickWatch" d:DesignHeight="440" d:DesignWidth="600">
    22        <UserControl.Resources>
    33                <Converter:TrueToVisibleOrCollapsedConverter x:Key="TrueToVisibleOrCollapsedConverter" />
     4        <Converter:TrueToVisibleConverter x:Key="TrueToVisibleConverter" />
    45        <Converter:LongToSizeMetricString x:Key="LongToSizeMetricString" />
    56        <Converter:DateTimeConverter x:Key="DateTimeConverter" />
     
    231232                            </ListView.View>
    232233                        </ListView>
    233                     </Grid>
     234                    </Grid>                   
    234235                </Border>
     236                <Controls:OpenCLPresentation x:Name="OpenCLPresentation" Visibility="{Binding IsOpenCLEnabled, ElementName=P2PQuickWatch, Converter={StaticResource TrueToVisibleConverter}}" />
    235237            </StackPanel>
    236238                </Grid>
  • trunk/CrypPlugins/KeySearcher/Presentation/Controls/P2PQuickWatchPresentation.xaml.cs

    r1705 r2146  
    2020        {
    2121            InitializeComponent();
     22        }
     23
     24        public static readonly DependencyProperty IsOpenCLEnabledProperty =
     25            DependencyProperty.Register("IsOpenCLEnabled",
     26                        typeof(Boolean),
     27                        typeof(P2PQuickWatchPresentation), new PropertyMetadata(false));
     28
     29        public Boolean IsOpenCLEnabled
     30        {
     31            get { return (Boolean)GetValue(IsOpenCLEnabledProperty); }
     32            set { SetValue(IsOpenCLEnabledProperty, value); }
    2233        }
    2334
  • trunk/CrypPlugins/KeySearcher/Presentation/QuickWatch.xaml.cs

    r1682 r2146  
    1212using System.Windows.Navigation;
    1313using System.Windows.Shapes;
     14using KeySearcherPresentation.Controls;
    1415
    1516namespace KeySearcherPresentation
     
    3334        }
    3435
     36        public static readonly DependencyProperty IsOpenCLEnabledProperty =
     37            DependencyProperty.Register("IsOpenCLEnabled",
     38                                typeof(
     39                                    Boolean),
     40                                typeof(
     41                                    QuickWatch), new PropertyMetadata(false));
     42
     43        public Boolean IsOpenCLEnabled
     44        {
     45            get { return (Boolean)GetValue(IsOpenCLEnabledProperty); }
     46            set
     47            {
     48                SetValue(IsOpenCLEnabledProperty, value);
     49                P2PQuickWatchPresentation.IsOpenCLEnabled = value;
     50                LocalQuickWatchPresentation.IsOpenCLEnabled = value;
     51            }
     52        }
     53
     54        public OpenCLPresentation OpenCLPresentation
     55        {
     56            get
     57            {
     58                if (IsP2PEnabled)
     59                    return P2PQuickWatchPresentation.OpenCLPresentation;
     60                else
     61                    return LocalQuickWatchPresentation.OpenCLPresentation;
     62            }
     63        }
     64
    3565        public QuickWatch()
    3666        {
Note: See TracChangeset for help on using the changeset viewer.