[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/2] migration/xbzrle: make xbzrle_encode_buffer
From: |
Wei Yang |
Subject: |
Re: [Qemu-devel] [PATCH 2/2] migration/xbzrle: make xbzrle_encode_buffer little easier to read |
Date: |
Wed, 12 Jun 2019 09:30:05 +0800 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Tue, Jun 11, 2019 at 06:59:26PM +0100, Dr. David Alan Gilbert wrote:
>* Wei Yang (address@hidden) wrote:
>> The encoding process could be described below:
>>
>> for [content]
>> get length of a run
>> encode this run
>>
>> By refactoring the code with this logic, it maybe a little easier to
>> understand.
>>
>> Signed-off-by: Wei Yang <address@hidden>
>> ---
>> migration/xbzrle.c | 153 +++++++++++++++++++++------------------------
>> 1 file changed, 73 insertions(+), 80 deletions(-)
>>
>> diff --git a/migration/xbzrle.c b/migration/xbzrle.c
>> index 1ba482ded9..25c69708ec 100644
>> --- a/migration/xbzrle.c
>> +++ b/migration/xbzrle.c
>> @@ -14,6 +14,59 @@
>> #include "qemu/cutils.h"
>> #include "xbzrle.h"
>>
>> +static int next_run(uint8_t *old_buf, uint8_t *new_buf, int off, int slen,
>> + bool zrun)
>> +{
>> + uint32_t len = 0;
>> + long res;
>> +
>> + res = (slen - off) % sizeof(long);
>> +
>> + /* first unaligned bytes */
>> + while (res) {
>> + uint8_t xor = old_buf[off + len] ^ new_buf[off + len];
>> +
>> + if (!(zrun ^ !!xor)) {
>> + break;
>> + }
>> + len++;
>> + res--;
>> + }
>> +
>> + if (res) {
>> + return len;
>> + }
>> +
>> + /* word at a time for speed, use of 32-bit long okay */
>> + while (off + len < slen) {
>> + /* truncation to 32-bit long okay */
>> + unsigned long mask = (unsigned long)0x0101010101010101ULL;
>> + long xor = (*(long *)(old_buf + off + len)) ^
>> + (*(long *)(new_buf + off + len));
>> +
>> + if (zrun && !(zrun ^ !!xor)) {
>
>Are lines like this really making it easier to read?
>
BTW, this line could be simplified to
if (!(zrun ^ !!xor)) {
>Juan: Opinion?
>
>Dave
>
--
Wei Yang
Help you, Help me