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

Side by Side Diff: courgette/ensemble_create.cc

Issue 6546008: Improved memory usage while applying patch.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 // The main idea in Courgette is to do patching *under a tranformation*. The 5 // The main idea in Courgette is to do patching *under a tranformation*. The
6 // input is transformed into a new representation, patching occurs in the new 6 // input is transformed into a new representation, patching occurs in the new
7 // repesentation, and then the tranform is reversed to get the patched data. 7 // repesentation, and then the tranform is reversed to get the patched data.
8 // 8 //
9 // The idea is applied to pieces (or 'elements') of the whole (or 'ensemble'). 9 // The idea is applied to pieces (or 'elements') of the whole (or 'ensemble').
10 // Each of the elements has to go through the same set of steps in lock-step. 10 // Each of the elements has to go through the same set of steps in lock-step.
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 corrected_transformed_elements_source 344 corrected_transformed_elements_source
345 .Init(linearized_corrected_transformed_elements); 345 .Init(linearized_corrected_transformed_elements);
346 346
347 Status delta2_status = 347 Status delta2_status =
348 GenerateSimpleDelta(&predicted_transformed_elements_source, 348 GenerateSimpleDelta(&predicted_transformed_elements_source,
349 &corrected_transformed_elements_source, 349 &corrected_transformed_elements_source,
350 transformed_elements_correction); 350 transformed_elements_correction);
351 if (delta2_status != C_OK) 351 if (delta2_status != C_OK)
352 return delta2_status; 352 return delta2_status;
353 353
354 // Last use, free storage.
355 linearized_predicted_transformed_elements.Retire();
356
354 // 357 //
355 // Generate sub-patch for whole enchilada. 358 // Generate sub-patch for whole enchilada.
356 // 359 //
357 SinkStream predicted_ensemble; 360 SinkStream predicted_ensemble;
358 361
359 predicted_ensemble.Write(base->Buffer(), base->Remaining()); 362 predicted_ensemble.Write(base->Buffer(), base->Remaining());
360 363
361 SourceStreamSet corrected_transformed_elements_source_set; 364 SourceStreamSet corrected_transformed_elements_source_set;
362 corrected_transformed_elements_source 365 corrected_transformed_elements_source
363 .Init(linearized_corrected_transformed_elements); 366 .Init(linearized_corrected_transformed_elements);
(...skipping 10 matching lines...) Expand all
374 &predicted_ensemble); 377 &predicted_ensemble);
375 if (status != C_OK) 378 if (status != C_OK)
376 return status; 379 return status;
377 if (!single_corrected_transformed_element.Empty()) 380 if (!single_corrected_transformed_element.Empty())
378 return C_STREAM_NOT_CONSUMED; 381 return C_STREAM_NOT_CONSUMED;
379 } 382 }
380 383
381 if (!corrected_transformed_elements_source_set.Empty()) 384 if (!corrected_transformed_elements_source_set.Empty())
382 return C_STREAM_NOT_CONSUMED; 385 return C_STREAM_NOT_CONSUMED;
383 386
387 // No more references to this stream's buffer.
388 linearized_corrected_transformed_elements.Retire();
389
384 FreeGenerators(&generators); 390 FreeGenerators(&generators);
385 391
392 size_t final_patch_input_size = predicted_ensemble.Length();
386 SourceStream predicted_ensemble_source; 393 SourceStream predicted_ensemble_source;
387 predicted_ensemble_source.Init(predicted_ensemble); 394 predicted_ensemble_source.Init(predicted_ensemble);
388 Status delta3_status = GenerateSimpleDelta(&predicted_ensemble_source, 395 Status delta3_status = GenerateSimpleDelta(&predicted_ensemble_source,
389 update, 396 update,
390 ensemble_correction); 397 ensemble_correction);
391 if (delta3_status != C_OK) 398 if (delta3_status != C_OK)
392 return delta3_status; 399 return delta3_status;
393 400
394 // 401 //
395 // Final output stream has a header followed by a StreamSet. 402 // Final output stream has a header followed by a StreamSet.
396 // 403 //
397 final_patch->WriteVarint32(CourgettePatchFile::kMagic); 404 final_patch->WriteVarint32(CourgettePatchFile::kMagic);
398 final_patch->WriteVarint32(CourgettePatchFile::kVersion); 405 final_patch->WriteVarint32(CourgettePatchFile::kVersion);
399 406
400 final_patch->WriteVarint32( 407 final_patch->WriteVarint32(
401 CalculateCrc(old_region.start(), old_region.length())); 408 CalculateCrc(old_region.start(), old_region.length()));
402 final_patch->WriteVarint32( 409 final_patch->WriteVarint32(
403 CalculateCrc(new_region.start(), new_region.length())); 410 CalculateCrc(new_region.start(), new_region.length()));
411 final_patch->WriteSizeVarint32(final_patch_input_size);
404 412
405 if (!patch_streams.CopyTo(final_patch)) 413 if (!patch_streams.CopyTo(final_patch))
406 return C_STREAM_ERROR; 414 return C_STREAM_ERROR;
407 415
408 VLOG(1) << "done GenerateEnsemblePatch " 416 VLOG(1) << "done GenerateEnsemblePatch "
409 << (base::Time::Now() - start_time).InSecondsF() << "s"; 417 << (base::Time::Now() - start_time).InSecondsF() << "s";
410 418
411 return C_OK; 419 return C_OK;
412 } 420 }
413 421
414 } // namespace 422 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698