VirtualBox

Changeset 95642 in vbox


Ignore:
Timestamp:
Jul 14, 2022 9:48:42 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
152286
Message:

Recording/FE/Qt: Brought back old behavior of comparing old and new data cache to avoid unnecessary COM calls. bugref:9286

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.cpp

    r95639 r95642  
    1515 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
    1616 */
    17 
    18 /* IPRT includes: */
    19 #include "iprt/path.h" /* For RTPATH_MAX in UIMachineSettingsDisplay::saveRecordingData(). */
    2017
    2118/* Qt includes: */
     
    11721169    bool fSuccess = true;
    11731170
     1171    /* Get old data from cache: */
     1172    const UIDataSettingsMachineDisplay &oldDisplayData = m_pCache->base();
    11741173    /* Get new data from cache: */
    11751174    const UIDataSettingsMachineDisplay &newDisplayData = m_pCache->data();
     
    11781177    Assert(recordingSettings.isNotNull());
    11791178
    1180     CRecordingScreenSettingsVector comRecordingScreenSettingsVector = recordingSettings.GetScreens();
    1181     for (int idxScreen = 0; fSuccess && idxScreen < comRecordingScreenSettingsVector.size(); ++idxScreen)
    1182     {
    1183         CRecordingScreenSettings comRecordingScreenSettings = comRecordingScreenSettingsVector.at(idxScreen);
    1184 
    1185         char szFileAbs[RTPATH_MAX] = "";
    1186         int vrc = RTStrCopy(szFileAbs, sizeof(szFileAbs), newDisplayData.m_strRecordingFilePath.toLocal8Bit().data());
    1187         if (RT_FAILURE(vrc))
    1188         {
    1189             notifyOperationProgressError(QString("Copying path failed with %1").arg(vrc));
    1190             fSuccess = false;
    1191         }
    1192 
    1193         if (fSuccess)
    1194         {
    1195             comRecordingScreenSettings.SetFilename(szFileAbs);
    1196             Assert(comRecordingScreenSettings.isOk());
    1197             fSuccess = comRecordingScreenSettings.isOk();
    1198         }
    1199 
    1200         /** @todo r=andy We have to explicitly set all settings to the screen objects here, to keep things in
    1201          *               sync with the settings from screen 0. Optimize / change this when we have support for per-screen
    1202          *               recording settings in the GUI.  See @bugref{10259} */
    1203 
    1204         /* Save recording frame width: */
    1205         if (fSuccess)
    1206         {
    1207             comRecordingScreenSettings.SetVideoWidth(newDisplayData.m_iRecordingVideoFrameWidth);
    1208             Assert(comRecordingScreenSettings.isOk());
    1209             fSuccess = comRecordingScreenSettings.isOk();
    1210         }
    1211         /* Save recording frame height: */
    1212         if (fSuccess)
    1213         {
    1214             comRecordingScreenSettings.SetVideoHeight(newDisplayData.m_iRecordingVideoFrameHeight);
    1215             Assert(comRecordingScreenSettings.isOk());
    1216             fSuccess = comRecordingScreenSettings.isOk();
    1217         }
    1218         /* Save recording frame rate: */
    1219         if (fSuccess)
    1220         {
    1221             comRecordingScreenSettings.SetVideoFPS(newDisplayData.m_iRecordingVideoFrameRate);
    1222             Assert(comRecordingScreenSettings.isOk());
    1223             fSuccess = comRecordingScreenSettings.isOk();
    1224         }
    1225         /* Save recording frame bit rate: */
    1226         if (fSuccess)
    1227         {
    1228             comRecordingScreenSettings.SetVideoRate(newDisplayData.m_iRecordingVideoBitRate);
    1229             Assert(comRecordingScreenSettings.isOk());
    1230             fSuccess = comRecordingScreenSettings.isOk();
    1231         }
    1232         /* Save recording options: */
    1233         if (fSuccess)
    1234         {
    1235             comRecordingScreenSettings.SetOptions(newDisplayData.m_strRecordingVideoOptions);
    1236             Assert(comRecordingScreenSettings.isOk());
    1237             fSuccess = comRecordingScreenSettings.isOk();
    1238         }
    1239         /* Finally, save the screen's recording state: */
    1240         /* Note: Must come last, as modifying options with an enabled recording state is not possible. */
    1241         if (fSuccess)
    1242         {
    1243             comRecordingScreenSettings.SetEnabled(newDisplayData.m_vecRecordingScreens[idxScreen]);
    1244             Assert(comRecordingScreenSettings.isOk());
    1245             fSuccess = comRecordingScreenSettings.isOk();
    1246         }
    1247 
    1248         if (!fSuccess)
    1249             break;
    1250     }
    1251 
    1252     /* Save whether recording is enabled:
    1253      * Do this last, as after enabling recording no changes via API aren't allowed anymore. */
    1254     if (fSuccess)
    1255     {
    1256         recordingSettings.SetEnabled(newDisplayData.m_fRecordingEnabled);
    1257         Assert(recordingSettings.isOk());
    1258         fSuccess = recordingSettings.isOk();
     1179    /** @todo r=andy Make the code below more compact -- too much redundancy here. */
     1180
     1181    /* Save new 'Recording' data for online case: */
     1182    if (isMachineOnline())
     1183    {
     1184        /* If 'Recording' was *enabled*: */
     1185        if (oldDisplayData.m_fRecordingEnabled)
     1186        {
     1187            /* Save whether recording is enabled: */
     1188            if (fSuccess && newDisplayData.m_fRecordingEnabled != oldDisplayData.m_fRecordingEnabled)
     1189            {
     1190                recordingSettings.SetEnabled(newDisplayData.m_fRecordingEnabled);
     1191                fSuccess = recordingSettings.isOk();
     1192            }
     1193
     1194            // We can still save the *screens* option.
     1195            /* Save recording screens: */
     1196            if (fSuccess)
     1197            {
     1198                CRecordingScreenSettingsVector comRecordingScreenSettingsVector = recordingSettings.GetScreens();
     1199                for (int iScreenIndex = 0; fSuccess && iScreenIndex < comRecordingScreenSettingsVector.size(); ++iScreenIndex)
     1200                {
     1201                    if (newDisplayData.m_vecRecordingScreens[iScreenIndex] == oldDisplayData.m_vecRecordingScreens[iScreenIndex])
     1202                        continue;
     1203
     1204                    CRecordingScreenSettings comRecordingScreenSettings = comRecordingScreenSettingsVector.at(iScreenIndex);
     1205                    comRecordingScreenSettings.SetEnabled(newDisplayData.m_vecRecordingScreens[iScreenIndex]);
     1206                    fSuccess = comRecordingScreenSettings.isOk();
     1207                }
     1208            }
     1209        }
     1210        /* If 'Recording' was *disabled*: */
     1211        else
     1212        {
     1213            CRecordingScreenSettingsVector comRecordingScreenSettingsVector = recordingSettings.GetScreens();
     1214            for (int iScreenIndex = 0; fSuccess && iScreenIndex < comRecordingScreenSettingsVector.size(); ++iScreenIndex)
     1215            {
     1216                CRecordingScreenSettings comRecordingScreenSettings = comRecordingScreenSettingsVector.at(iScreenIndex);
     1217
     1218                // We should save all the options *before* 'Recording' activation.
     1219                // And finally we should *enable* Recording if necessary.
     1220                /* Save recording file path: */
     1221                if (fSuccess && newDisplayData.m_strRecordingFilePath != oldDisplayData.m_strRecordingFilePath)
     1222                {
     1223                    comRecordingScreenSettings.SetFilename(newDisplayData.m_strRecordingFilePath);
     1224                    Assert(comRecordingScreenSettings.isOk());
     1225                    fSuccess = comRecordingScreenSettings.isOk();
     1226                }
     1227                /* Save recording frame width: */
     1228                if (fSuccess && newDisplayData.m_iRecordingVideoFrameWidth != oldDisplayData.m_iRecordingVideoFrameWidth)
     1229                {
     1230                    comRecordingScreenSettings.SetVideoWidth(newDisplayData.m_iRecordingVideoFrameWidth);
     1231                    Assert(comRecordingScreenSettings.isOk());
     1232                    fSuccess = comRecordingScreenSettings.isOk();
     1233                }
     1234                /* Save recording frame height: */
     1235                if (fSuccess && newDisplayData.m_iRecordingVideoFrameHeight != oldDisplayData.m_iRecordingVideoFrameHeight)
     1236                {
     1237                    comRecordingScreenSettings.SetVideoHeight(newDisplayData.m_iRecordingVideoFrameHeight);
     1238                    Assert(comRecordingScreenSettings.isOk());
     1239                    fSuccess = comRecordingScreenSettings.isOk();
     1240                }
     1241                /* Save recording frame rate: */
     1242                if (fSuccess && newDisplayData.m_iRecordingVideoFrameRate != oldDisplayData.m_iRecordingVideoFrameRate)
     1243                {
     1244                    comRecordingScreenSettings.SetVideoFPS(newDisplayData.m_iRecordingVideoFrameRate);
     1245                    Assert(comRecordingScreenSettings.isOk());
     1246                    fSuccess = comRecordingScreenSettings.isOk();
     1247                }
     1248                /* Save recording frame bit rate: */
     1249                if (fSuccess && newDisplayData.m_iRecordingVideoBitRate != oldDisplayData.m_iRecordingVideoBitRate)
     1250                {
     1251                    comRecordingScreenSettings.SetVideoRate(newDisplayData.m_iRecordingVideoBitRate);
     1252                    Assert(comRecordingScreenSettings.isOk());
     1253                    fSuccess = comRecordingScreenSettings.isOk();
     1254                }
     1255                /* Save recording options: */
     1256                if (fSuccess && newDisplayData.m_strRecordingVideoOptions != oldDisplayData.m_strRecordingVideoOptions)
     1257                {
     1258                    comRecordingScreenSettings.SetOptions(newDisplayData.m_strRecordingVideoOptions);
     1259                    Assert(comRecordingScreenSettings.isOk());
     1260                    fSuccess = comRecordingScreenSettings.isOk();
     1261                }
     1262                /* Finally, save the screen's recording state: */
     1263                /* Note: Must come last, as modifying options with an enabled recording state is not possible. */
     1264                if (fSuccess && newDisplayData.m_vecRecordingScreens != oldDisplayData.m_vecRecordingScreens)
     1265                {
     1266                    comRecordingScreenSettings.SetEnabled(newDisplayData.m_vecRecordingScreens[iScreenIndex]);
     1267                    Assert(comRecordingScreenSettings.isOk());
     1268                    fSuccess = comRecordingScreenSettings.isOk();
     1269                }
     1270            }
     1271
     1272            /* Save whether recording is enabled:
     1273             * Do this last, as after enabling recording no changes via API aren't allowed anymore. */
     1274            if (fSuccess && newDisplayData.m_fRecordingEnabled != oldDisplayData.m_fRecordingEnabled)
     1275            {
     1276                recordingSettings.SetEnabled(newDisplayData.m_fRecordingEnabled);
     1277                Assert(recordingSettings.isOk());
     1278                fSuccess = recordingSettings.isOk();
     1279            }
     1280        }
     1281    }
     1282    /* Save new 'Recording' data for offline case: */
     1283    else
     1284    {
     1285        CRecordingScreenSettingsVector comRecordingScreenSettingsVector = recordingSettings.GetScreens();
     1286        for (int iScreenIndex = 0; fSuccess && iScreenIndex < comRecordingScreenSettingsVector.size(); ++iScreenIndex)
     1287        {
     1288            CRecordingScreenSettings comRecordingScreenSettings = comRecordingScreenSettingsVector.at(iScreenIndex);
     1289
     1290            /* Save recording file path: */
     1291            if (fSuccess && newDisplayData.m_strRecordingFilePath != oldDisplayData.m_strRecordingFilePath)
     1292            {
     1293                comRecordingScreenSettings.SetFilename(newDisplayData.m_strRecordingFilePath);
     1294                Assert(comRecordingScreenSettings.isOk());
     1295                fSuccess = comRecordingScreenSettings.isOk();
     1296            }
     1297            /* Save recording frame width: */
     1298            if (fSuccess && newDisplayData.m_iRecordingVideoFrameWidth != oldDisplayData.m_iRecordingVideoFrameWidth)
     1299            {
     1300                comRecordingScreenSettings.SetVideoWidth(newDisplayData.m_iRecordingVideoFrameWidth);
     1301                Assert(comRecordingScreenSettings.isOk());
     1302                fSuccess = comRecordingScreenSettings.isOk();
     1303            }
     1304            /* Save recording frame height: */
     1305            if (fSuccess && newDisplayData.m_iRecordingVideoFrameHeight != oldDisplayData.m_iRecordingVideoFrameHeight)
     1306            {
     1307                comRecordingScreenSettings.SetVideoHeight(newDisplayData.m_iRecordingVideoFrameHeight);
     1308                Assert(comRecordingScreenSettings.isOk());
     1309                fSuccess = comRecordingScreenSettings.isOk();
     1310            }
     1311            /* Save recording frame rate: */
     1312            if (fSuccess && newDisplayData.m_iRecordingVideoFrameRate != oldDisplayData.m_iRecordingVideoFrameRate)
     1313            {
     1314                comRecordingScreenSettings.SetVideoFPS(newDisplayData.m_iRecordingVideoFrameRate);
     1315                Assert(comRecordingScreenSettings.isOk());
     1316                fSuccess = comRecordingScreenSettings.isOk();
     1317            }
     1318            /* Save recording frame bit rate: */
     1319            if (fSuccess && newDisplayData.m_iRecordingVideoBitRate != oldDisplayData.m_iRecordingVideoBitRate)
     1320            {
     1321                comRecordingScreenSettings.SetVideoRate(newDisplayData.m_iRecordingVideoBitRate);
     1322                Assert(comRecordingScreenSettings.isOk());
     1323                fSuccess = comRecordingScreenSettings.isOk();
     1324            }
     1325            /* Save capture options: */
     1326            if (fSuccess && newDisplayData.m_strRecordingVideoOptions != oldDisplayData.m_strRecordingVideoOptions)
     1327            {
     1328                comRecordingScreenSettings.SetOptions(newDisplayData.m_strRecordingVideoOptions);
     1329                Assert(comRecordingScreenSettings.isOk());
     1330                fSuccess = comRecordingScreenSettings.isOk();
     1331            }
     1332            /* Finally, save the screen's recording state: */
     1333            /* Note: Must come last, as modifying options with an enabled recording state is not possible. */
     1334            if (fSuccess && newDisplayData.m_vecRecordingScreens != oldDisplayData.m_vecRecordingScreens)
     1335            {
     1336                comRecordingScreenSettings.SetEnabled(newDisplayData.m_vecRecordingScreens[iScreenIndex]);
     1337                Assert(comRecordingScreenSettings.isOk());
     1338                fSuccess = comRecordingScreenSettings.isOk();
     1339            }
     1340        }
     1341
     1342        /* Save whether recording is enabled:
     1343         * Do this last, as after enabling recording no changes via API aren't allowed anymore. */
     1344        if (fSuccess && newDisplayData.m_fRecordingEnabled != oldDisplayData.m_fRecordingEnabled)
     1345        {
     1346            recordingSettings.SetEnabled(newDisplayData.m_fRecordingEnabled);
     1347            Assert(recordingSettings.isOk());
     1348            fSuccess = recordingSettings.isOk();
     1349        }
    12591350    }
    12601351
    12611352    /* Show error message if necessary: */
    12621353    if (!fSuccess)
    1263     {
    1264         if (!m_machine.isOk()) /* Did we already warn above? */
    1265             notifyOperationProgressError(UIErrorString::formatErrorInfo(m_machine));
    1266     }
     1354        notifyOperationProgressError(UIErrorString::formatErrorInfo(m_machine));
    12671355
    12681356    /* Return result: */
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette