Flush() will be call automatically when calling Proto(), why do we still need it as a public method? For simplicity I think we need to change Flush() to private or just remove it (put into Proto()).
Currently they two are only called in these two places publicly:
./framework/program_desc.cc:31: block->Flush();
./framework/block_desc.cc:104: op_desc->Flush();