It is approproximately the sum of the cost of executing all called functions plus the cost of executing the wrapper which includes small gas expenditures to pack and unpack function arguments.
The cost difference isn't serious. The decision should probably be based on your intended flow and other factors. For example, if you need multiple actions to complete as an atomic transaction, then a wrapper combined with access control on the target functions (e.g. onlyWrapper) to ensure that the individual functions are not called by any other process.
You can, of course, play with it to observe the costs and confirm your findings align with expectations. Given two targets A & B and a Wrapper, the cost should be:
cost A + cost B + cost Wrapper
A contract's role is primarily to safeguard the internal integrity of the system and enforce the rules.
- Can A or B ever be called individually by an external entity? Is that a valid way to use the contract?
- Should A & B always be called together?
- Is it useful to sometimes call A & B together but it is not a strict requirement?
Corresponding implementations that all cost roughly the same at runtime:
- Let the user call A or B
- Force the user to call the Wrapper
- Let the user call A, B or the Wrapper
Hope it helps.